Rozważmy następujący kod:zapętlanie/iteracyjne nad drugim poziomie zagnieżdżone JSON w podróży lang
package main
import (
"encoding/json"
"fmt"
"reflect"
)
func main() {
//Creating the maps for JSON
m := map[string]interface{}{}
//Parsing/Unmarshalling JSON encoding/json
err := json.Unmarshal([]byte(input), &m)
fmt.Println("\nReflect type of Parsing/Unmarshalling Error Object:\n",reflect.TypeOf(err))
fmt.Println("\nParsing/Unmarshalling Error Object:\n",err)
if err != nil {
panic(err)
}
fmt.Println("\nParsed JSON is as follows:\n",m)
fmt.Println("\nReflect type of parsed json object:\n", reflect.TypeOf(m))
for firstLvlkey, firstLvlValue := range m {
fmt.Println("First Level Key:", firstLvlkey)
fmt.Println("First Level Key reflect type of :", reflect.TypeOf(firstLvlkey))
fmt.Println("First Level Value:", firstLvlValue)
fmt.Println("First Level Value reflect type of :", reflect.TypeOf(firstLvlValue))
// <===============================>
//Here I want to iterate/loop over innerJSON1, InnerJSON2 then reach to level InnerInnerJSONArray - fld1 and fld2
// <===============================>
}
}
const input = `
{
"outterJSON":{
"innerJSON1":{
"value1":10,
"value2":22
,
"InnerInnerArray": [ "test1" , "test2"],
"InnerInnerJSONArray": [ {"fld1" : "val1"} , {"fld2" : "val2"} ]
},
"InnerJSON2":"NoneValue"
}
}
`
mam pewne wymagania jak chcę czytać/dostać cały klucz i wartość w String
typu jakiegoś ADN przetwórczym Nie mogę zdefiniować struct
, ponieważ otrzymam dynamiczne wejście JSON (np. InnerInnerArray
jako ciąg, następnie pętla drugiego poziomu da mi indeks tablicy i przetworzy każdy JSON o kluczu fld1
i val1
).
Chciałbym przetestować każdą parę klucz/wartość w niej zawartą, jaki jest najskuteczniejszy sposób poruszania się po mapie?
Uwaga: Jestem nowicjuszem w Go-lang, twoja sugestia/poprawa na pytanie jest również mile widziana.