在Go中解组json时,我可以访问“额外”字段吗?

时间:2015-12-18 18:30:27

标签: json go

让我说我有这种类型:

in := []byte(`{"bar":"aaa", "baz":123}`)

foo := &Foo{}
json.Unmarshal(in,foo)

我希望将这个json解组为它:

$Category = $Categories->where('CategoryID', $request->input('CategoryID'))

会成功。我想至少知道在处理过程中有些字段被跳过了。有没有什么好方法可以访问这些信息?

here

1 个答案:

答案 0 :(得分:1)

您可能已经意识到可以将任何有效的json解组为map[string]interface{}。已经解组为Foo的实例已经没有可用的元数据,您可以在其中检查被排除的字段或类似的字段。但是,您可以在两种类型中解组,然后在地图中查看与Foo上的字段不对应的键。

in := []byte(`{"bar":"aaa", "baz":123}`)

foo := &Foo{}
json.Unmarshal(in,foo)

allFields := &map[string]interface{}
json.Unmarshal(in, allFields)
for k, _ := range allFields {
    fmt.Println(k)
    // could also use reflect to get field names as string from Foo
    // the get the symmetric difference by nesting another loop here
    // and appending any key that is in allFields but not on Foo to a slice
}