xml2json

package module
v0.0.0-...-15398ba Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 8, 2020 License: GPL-3.0 Imports: 8 Imported by: 0

README

goxml2json CircleCI

Go package that converts XML to JSON

Install
go get -u github.com/basgys/goxml2json
Importing
import github.com/basgys/goxml2json
Usage

Code example

  package main

  import (
  	"fmt"
  	"strings"

  	xj "github.com/basgys/goxml2json"
  )

  func main() {
  	// xml is an io.Reader
  	xml := strings.NewReader(`<?xml version="1.0" encoding="UTF-8"?><hello>world</hello>`)
  	json, err := xj.Convert(xml)
  	if err != nil {
  		panic("That's embarrassing...")
  	}

  	fmt.Println(json.String())
  	// {"hello": "world"}
  }

Input

  <?xml version="1.0" encoding="UTF-8"?>
  <osm version="0.6" generator="CGImap 0.0.2">
   <bounds minlat="54.0889580" minlon="12.2487570" maxlat="54.0913900" maxlon="12.2524800"/>
   <foo>bar</foo>
  </osm>

Output

  {
    "osm": {
      "-version": 0.6,
      "-generator": "CGImap 0.0.2",
      "bounds": {
        "-minlat": "54.0889580",
        "-minlon": "12.2487570",
        "-maxlat": "54.0913900",
        "-maxlon": "12.2524800"
      },
      "foo": "bar"
    }
  }

With type conversion

  package main

  import (
  	"fmt"
  	"strings"

  	xj "github.com/basgys/goxml2json"
  )

  func main() {
  	// xml is an io.Reader
  	xml := strings.NewReader(`<?xml version="1.0" encoding="UTF-8"?><price>19.95</price>`)
  	json, err := xj.Convert(xml, xj.WithTypeConverter(xj.Float))
  	if err != nil {
  		panic("That's embarrassing...")
  	}

  	fmt.Println(json.String())
  	// {"price": 19.95}
  }
Contributing

Feel free to contribute to this project if you want to fix/extend/improve it.

Contributors
TODO
  • Categorise errors
  • Option to prettify the JSON output
  • Benchmark

Documentation

Overview

Package xml2json is an XML to JSON converter

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Convert

func Convert(r io.Reader, ps ...plugin) (*bytes.Buffer, error)

Convert converts the given XML document to JSON

func ExcludeAttributes

func ExcludeAttributes(attrs []string) *excluder

ExcludeAttributes excludes some xml attributes, for example, xmlns:xsi, xsi:noNamespaceSchemaLocation

func NodePlugin

func NodePlugin(path string, plugin nodePlugin) nodeFormatter

func ToArray

func ToArray() *arrayFormatter

func WithAttrPrefix

func WithAttrPrefix(prefix string) *attrPrefixer

WithAttrPrefix appends the given prefix to the json output of xml attribute fields to preserve namespaces

func WithContentPrefix

func WithContentPrefix(prefix string) *contentPrefixer

WithContentPrefix appends the given prefix to the json output of xml content fields to preserve namespaces

func WithNodes

func WithNodes(n ...nodeFormatter) *nodesFormatter

WithNodes formats specific nodes

func WithTypeConverter

func WithTypeConverter(ts ...JSType) *customTypeConverter

WithTypeConverter allows customized js type conversion behavior by passing in the desired JSTypes

Types

type Decoder

type Decoder struct {
	// contains filtered or unexported fields
}

A Decoder reads and decodes XML objects from an input stream.

func NewDecoder

func NewDecoder(r io.Reader, plugins ...plugin) *Decoder

NewDecoder returns a new decoder that reads from r.

func (*Decoder) AddFormatters

func (dec *Decoder) AddFormatters(formatters []nodeFormatter)

func (*Decoder) Decode

func (dec *Decoder) Decode(root *Node) error

Decode reads the next JSON-encoded value from its input and stores it in the value pointed to by v.

func (*Decoder) DecodeWithCustomPrefixes

func (dec *Decoder) DecodeWithCustomPrefixes(root *Node, contentPrefix string, attributePrefix string) error

func (*Decoder) ExcludeAttributes

func (dec *Decoder) ExcludeAttributes(attrs []string)

func (*Decoder) SetAttributePrefix

func (dec *Decoder) SetAttributePrefix(prefix string)

func (*Decoder) SetContentPrefix

func (dec *Decoder) SetContentPrefix(prefix string)

type Encoder

type Encoder struct {
	// contains filtered or unexported fields
}

An Encoder writes JSON objects to an output stream.

func NewEncoder

func NewEncoder(w io.Writer, plugins ...plugin) *Encoder

NewEncoder returns a new encoder that writes to w.

func (*Encoder) Encode

func (enc *Encoder) Encode(root *Node) error

Encode writes the JSON encoding of v to the stream

type JSType

type JSType int

https://cswr.github.io/JsonSchema/spec/basic_types/ JSType is a JavaScript extracted from a string

const (
	Bool JSType = iota
	Int
	Float
	String
	Null
)

func Str2JSType

func Str2JSType(s string) JSType

Str2JSType extract a JavaScript type from a string

type Node

type Node struct {
	Children              map[string]Nodes
	Data                  string
	ChildrenAlwaysAsArray bool
}

Node is a data element on a tree

func (*Node) AddChild

func (n *Node) AddChild(s string, c *Node)

AddChild appends a node to the list of children

func (*Node) GetChild

func (n *Node) GetChild(path string) *Node

GetChild returns child by path if exists. Path looks like "grandparent.parent.child.grandchild"

func (*Node) IsComplex

func (n *Node) IsComplex() bool

IsComplex returns whether it is a complex type (has children)

type Nodes

type Nodes []*Node

Nodes is a list of nodes

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL