easyjson 将数组解组为 go 结构
easyjson unmarshal array into go struct
我最近开始使用 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.
处理对象数组
顺便说一下,我知道这个问题与这个问题类似 但是用户使用内置 json 包而我 have/want 使用 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
(但你必须做完全相同的事情以另一种方式操作它你想稍后编组它......)。
我最近开始使用 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.
处理对象数组顺便说一下,我知道这个问题与这个问题类似
那
呢//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
(但你必须做完全相同的事情以另一种方式操作它你想稍后编组它......)。