как преобразовать xml в json в GO? [Дубликат]

Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException вообще.

См. также: A хороший список лучших практик

Я бы добавил, очень важно, хорошо использовать модификатор final. Использование "окончательной" модификатор, когда это применимо в Java

Сводка:

  1. Используйте модификатор final для обеспечения хорошей инициализации.
  2. Избегайте возврата null в методы, например, при возврате пустых коллекций.
  3. Использовать аннотации @NotNull и @Nullable
  4. Быстрое завершение работы и использование утверждений, чтобы избежать распространения нулевых объектов через все приложение, когда они не должен быть пустым.
  5. Сначала используйте значения с известным объектом: if("knownObject".equals(unknownObject)
  6. Предпочитают valueOf() поверх toString ().
  7. Используйте null safe StringUtils StringUtils.isEmpty(null).

5
задан Passionate Developer 16 October 2014 в 07:59
поделиться

2 ответа

Если вам нужно преобразовать XML-документ в JSON с неизвестной структурой, вы можете использовать goxml2json .

Пример:

import (
  // Other imports ...
  xj "github.com/basgys/goxml2json"
)

func (u *UserResource) authenticateUser(request *restful.Request, response *restful.Response) {
  // Extract data from restful.Request
  xml := strings.NewReader(`<?xml version="1.0" encoding="UTF-8"?><app version="1.0"><request>1111</request></app>`)

  // Convert
    json, err := xj.Convert(xml)
    if err != nil {
        // Oops...
    }

  // ... Use JSON ...
}

Примечание: я являюсь автором этой библиотеки.

4
ответ дан basgys 18 August 2018 в 17:31
поделиться
  • 1
    не работает здесь. Тот же фрагмент результата & quot; & quot; – luizfelipetx 17 March 2017 в 15:59
  • 2
    пример исправления: (это отлично работает) func main () {// xml - это io.Reader xml: = strings.NewReader (<?xml version="1.0" encoding="UTF-8"?><hello>world</hello>) json, err: = xj.Convert (xml), если err! = nil {panic («Это неудобно ...»)} fmt.Println (json.String ()) // {"hello": "world"}} – luizfelipetx 17 March 2017 в 16:02
  • 3
    @luizfelipetx Спасибо, я исправил фрагмент – basgys 18 March 2017 в 13:18

Общий ответ на ваш вопрос о том, как преобразовать XML-вход в вывод JSON, может быть примерно таким:

http://play.golang.org/p/7HNLEUnX-m

package main

import (
    "encoding/json"
    "encoding/xml"
    "fmt"
)

type DataFormat struct {
    ProductList []struct {
        Sku      string `xml:"sku" json:"sku"`
        Quantity int    `xml:"quantity" json:"quantity"`
    } `xml:"Product" json:"products"`
}

func main() {
    xmlData := []byte(`<?xml version="1.0" encoding="UTF-8" ?>
<ProductList>
    <Product>
        <sku>ABC123</sku>
        <quantity>2</quantity>
    </Product>
    <Product>
        <sku>ABC123</sku>
        <quantity>2</quantity>
    </Product>
</ProductList>`)

    data := &DataFormat{}
    err := xml.Unmarshal(xmlData, data)
    if nil != err {
        fmt.Println("Error unmarshalling from XML", err)
        return
    }

    result, err := json.Marshal(data)
    if nil != err {
        fmt.Println("Error marshalling to JSON", err)
        return
    }

    fmt.Printf("%s\n", result)
}
11
ответ дан MDrollette 18 August 2018 в 17:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: