登录
首页 >  Golang >  Go问答

如何在Go中将字符串编码为JSON?

来源:stackoverflow

时间:2024-03-07 10:57:26 389浏览 收藏

从现在开始,努力学习吧!本文《如何在Go中将字符串编码为JSON?》主要讲解了等等相关知识点,我会在golang学习网中持续更新相关的系列文章,欢迎大家关注并积极留言建议。下面就先一起来看一下本篇正文内容吧,希望能帮到你!

问题内容

假设我有这个字符串:

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

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


解决方案


每当您有预先未知的 json 属性名称,或者它们不能很好地表示为结构体的字段时,您或多或少都会留下一个选项,即映射。因此,首先您需要将 "data" 属性解组到地图中。

然而,go 中的映射被实现为由一组唯一键索引的无序元素组。因此基本上没有办法确保 go 中地图的顺序,因此您必须将地图中的数据传输到可以排序的内容中,例如切片。 p>

将数据放入切片后,您可以使用标准 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

本篇关于《如何在Go中将字符串编码为JSON?》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>