你可以建立與一種類型的斷言開關遞歸函數來鍵入斷言JSON數組的多維地圖或平坦的地圖。不幸的是,你的多維地圖會很快變得複雜。如果你有一個嵌套的JSON數組,例如「map [string] map [string] map [string] string」),我經常需要映射至少幾個維度。人「。
如果您嘗試拼合嵌套的JSON數組,您的鍵將會重疊(即,您只能使用「名稱」鍵一次)。您可以標記鍵 - 例如「name_1」:「Nick」,但此解決方案可能無法用於您的用例。從鏈接兩個例子 http://github.com/Jeffail/gabs
我給你量身定製的例子,然後GABS的github上頁:
如果你想要去的多維路徑,這個包可以爲您的需求很好地工作:
package main
import (
"fmt"
"github.com/Jeffail/gabs"
)
func main() {
jsonS := `{
"people": [
{
"diffs": [
77
],
"original": {
"name": "Nick",
"active": "Active",
"email": "ni[email protected]"
},
"id": "21"
}
]
}`
gabsCon, err := gabs.ParseJSON([]byte(jsonS))
if err != nil {
fmt.Println("gabs ParseJSON failed")
}
n1, ok := gabsCon.Path("people.original.name").Data().(string)
if !ok {
fmt.Println("gabs path failed")
}
fmt.Println(n1)
}
這裏的一個非定製的示例,其將打印 - 第一,第二,第三):
jsonParsed, _ := gabs.ParseJSON([]byte(`{"array":[ "first", "second", "third" ]}`))
// S is shorthand for Search
children, _ := jsonParsed.S("array").Children()
for _, child := range children {
fmt.Println(child.Data().(string))
}
而且,一個其他示例,將打印 - 1,2,3:
jsonParsed, _ := gabs.ParseJSON([]byte(`{"array":[ {"value":1}, {"value":2}, {"value":3} ]}`))
fmt.Println(jsonParsed.Path("array.value").String())
歡迎使用靜態類型語言。使用'json'包,你總是可以解組成一個'map [string] interface {}',但這通常不是你真正想要的。 – RayfenWindspear