我最近开始使用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
将无法工作,因为我无法在切片上执行UnmarshalEasyJSON。 我正在使用easyjson,因为它是处理json数据的紧固方式。
所以我的问题是:如何使用easyjson处理对象数组。
顺便说一下,我知道这个问题类似于这个问题Unmarshal json into struct: cannot unmarshal array into Go value但是用户使用了内置的json包,我想/想要使用easyjson。 提前谢谢。
答案 0 :(得分:0)
怎么样?
//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
(但是您必须执行完全相同的操作另一种方式,你想在以后编组......)。