如何在Go中将字符串转换为JSON?

假设我有这个字符串:

`
{
    "testCode": 0,"replyTest": "OK","data": {
        "001": {
            "fields": {
                "name": "arben","fav_color": "blue","address": "PH",}
        },"002": {
            "fields": {
                "name": "john","fav_color": "black",}
}
`

如何将此字符串转换为data以列表形式的JSON,以便我在进程中循环此列表?

qf201319 回答:如何在Go中将字符串转换为JSON?

每当您拥有未知的json属性名称,或者它们不能很好地表现为struct的字段时,就会或多或少地保留一个选项,即map。因此,首先您需要将"data"属性编组到地图中。

但是,Go中的地图是通过由一组唯一键索引的无序组元素实现的。因此,基本上没有办法在Go中确保地图的顺序,因此您必须将地图中的数据传输到可以排序的内容中,例如切片。 >

将数据存储在切片中之后,可以使用标准的sort程序包按所需顺序对切片进行排序。


您可以先声明所需的类型:

type DataItem struct {
    Key    string     `json:"-"`
    Fields DataFields `json:"fields"`
}

type DataFields struct {
    Name     string `json:"name"`
    FavColor string `json:"fav_color"`
    Address  string `json:"address"`
}

然后解组json

var obj struct {
    TestCode  int                  `json:"testCode"`
    ReplyTest string               `json:"replyTest"`
    Data      map[string]*DataItem `json:"data"`
}
if err := json.Unmarshal(data,&obj); err != nil {
    panic(err)
}

将地图内容传输到一个切片

items := []*DataItem{}
for key,item := range obj.Data {
    item.Key = key // keep track of the key because it will be used to order the contents of the slice
    items = append(items,item)
}

最后对切片进行排序

sort.Slice(items,func(i,j int) bool {
    return items[i].Key < items[j].Key
})

https://play.golang.com/p/D2u46veOQwD

本文链接:https://www.f2er.com/3124428.html

大家都在问