あなたは多次元マップにJSON配列を主張型に型アサーションスイッチで再帰関数を構築することができフラット化されたマップです。残念ながら、あなたの多次元地図は本当に素早く複雑になるでしょう。
私が言っていることは、少なくともいくつかのディメンション(map [string] map [string] map [string] string)をマップする必要があることです。上記の "人々"
ネストされたJSON配列を平坦化しようとすると、キーが重複してしまう(つまり、「名前」キーは1回しか使用できません)。あなたは "name_1"のような何かキーにタグを付けることができます: "Nick"しかし、この解決策はあなたのユースケースではうまくいかないかもしれません。 gabsのgithubのページに、リンクから2つの例を http://github.com/Jeffail/gabs
は、私はあなたに仕立て例をあげると、:あなたは、多次元のルートを移動したい場合は
、このパッケージは、ニーズのために働くこと
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))
}
と、 - 第一、第二、第三の)ここ
package main
import (
"fmt"
"github.com/Jeffail/gabs"
)
func main() {
jsonS := `{
"people": [
{
"diffs": [
77
],
"original": {
"name": "Nick",
"active": "Active",
"email": "[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)
}
非調整印刷し、例えば、です他の例 - 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