gpt4 book ai didi

json - easyjson 将数组解码为 go 结构

转载 作者:数据小太阳 更新时间:2023-10-29 03:26:01 26 4
gpt4 key购买 nike

我最近开始使用 golang 和 easyjson。现在我必须将一个 json 数组解码为一个结构才能使用它。这就是我得到的。

传入的 JSON 数据如下所示

[
{
"Item1":true,
"Item2":"hello",
"Item3":{
"A": 1,
},
},
...
]

我的结构:

package something

//easyjson:json
type Item struct {
Item1 bool
Item2 string
Item3 SubItem
}

//easyjson:json
type SubItem struct {
A int
}

(我构建了 *_easyjson.go 文件)

下面是我将如何使用 easyjson:

func ConvertJsonToItem(jsondata string) Item {
var item Item
lexer := jlexer.Lexer{Data: []byte(jsondata)}

item.UnmarshalEasyJSON(&lexer)
if lexer.Error() != nil {
panic(lexer.Error())
}
return Item
}

这行不通,我知道,因为 json 由一组“Item”结构组成。但是写一些像

var items []Item

也不起作用,因为我无法在 slice 上执行 UnmarshalEasyJSON。我正在使用 easyjson,因为它是处理 json 数据的最快方式。

所以我的问题是:如何使用 easyjson 处理对象数组。

顺便说一句,我知道这个问题和这个问题很相似Unmarshal json into struct: cannot unmarshal array into Go value但是用户使用内置的 json 包,我已经/想要使用 easyjson。提前谢谢你。

最佳答案

关于

//easyjson:json
type ItemSlice []Item

?

然后,你可以做

func ConvertJsonToItem(jsondata string) ItemSlice {
var items ItemSlice
lexer := jlexer.Lexer{Data: []byte(jsondata)}

items.UnmarshalEasyJSON(&lexer)
if lexer.Error() != nil {
panic(lexer.Error())
}
return items
}

如果你真的不想在你的外部代码中使用 ItemSlice,你仍然可以在返回它之前将它转换回 []Item(但是你会必须以其他方式执行完全相同的操作,以便稍后对其进行编码……)。

关于json - easyjson 将数组解码为 go 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41632922/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com