Parsen der JSON-Datei in struct golang

Habe ich diese JSON-Datei:

    {
  "AHSS": {
    "Lifelong Learning": "1sVhClGzmD5N_S6wGiS9_xHj2IkVgSv_un0rktvH2Goo",
    "TEST Learning": "1sdfVhClGzmD5N_S6wGiS9_xHj2ffgIkVgSv_un0rko56545o",
    "TEST Learning2": "fg1ac_PiSaWzeL3bA3tjWYs23dh61sVhClHj2IkVgSv_un0rktvH2Goo",
    "TEST Learning3": "13444sVhClGzmD5N_S6wGiS9_xHj2IkVgSv_un0rktyutvH2Goo",
    "TEST Learning4": "6657681sVhClGzmD5N_S6wGiS9_xHj2IkVgSv_un0rktvH2Goo"
  },
  "ProfServices": {
    "IT": "1fgac_PiSaWzeLxxdVuZs3bA3tjWY345d",
    "SomethingElse": "1ac_Pi3bA3tjWY4563",
    "Foo": "12ac_PiVuZs3bA3tjWYghfgj",
    "Bar": "445341ac_PiSaWzeLxA3tjWY54",
    "School1": "fg1ac_PiSaWzeL3bA3tjWYs23dh6",
    "School2": "fg341ac_PiSaWzeLZs3bA3tjWYsd4",
    "School3": "fgdf1ac_PiSaWzeLuZs3bA3tjWdgfY"    
  },
  "CollegeOfEngineering": {
    "Maths": "asdasdasdas45",
    "Physics": "pa6asa_Asddg",
    "Astrophysics": "asdfdasdasda",
    "School5": "mykeyyslaksdlkasmdlka",
    "School6": "asdasdkeykeykeykey"
  },
  "AnotherCollege": {
    "School7": "f111g1a2c_PiSaWzeL3bA3tjWYsdh6",
    "School8": "f4434234g341ac_PiSafgdfgdfgWzeLZs3bA3tjWYsd4",
    "School9": "fg23df1ac_PiSaWzeLuZs3bA3tjWdgfY"
  }
}

Dies ist nur ein Beispiel um das ganze zu testen, aber meine eigentliche json-Datei haben viel mehr Daten. Aber das format wird immer die gleiche sein. Ich habe ein array von 'Hochschulen' wie 'AHSS' und ProfServices'. Innerhalb dieser Hochschulen sind 'Schulen' wie 'ES' oder 'Lifeling Lernen". Jede Schule hat Ihre eigenen, einzigartigen Schlüssel. Muss ich Lesen Sie diese JSON-Datei und wandeln es in ein struct.

Ich habe versucht, auf der Suche rund um und mit json.Decodieren und json.Unmarshal-und ich bin wirklich nicht sicher, wie Sie Sie zu bekommen, was ich brauche. Alles, was ich versucht habe, druckt eine leere struct. Vielleicht ist das layout von meinem struct im gehen ist falsch?

Hier ist der struct layout-ich bin mit nicht 100% das ist richtig):

    //Sheets struct will import from sheets.json
    Sheets struct {
        Colleges []struct {
            SheetKeys []string
        }
    }
)

Hier sind zwei Methoden, die ich versuchte, um mein Ziel erreichen zu importieren json-Datei in ein struct.

1)

sheetData, err := os.Open("sheets.json")
if err != nil {
    log.Fatalln(err)
}

jsonParser := json.NewDecoder(sheetData)
s := Sheets{}
jsonParser.Decode(&s)
log.Println(s)

2)

sheetData, err := ioutil.ReadFile("sheets.json")
s := Sheets{}
err = json.Unmarshal(sheetData, &s)
if err != nil {
    log.Fatalln(err)
}

log.Println(s)

Kann jemand eine Methode bereitstellen, mit der der Import dieser json-Datei korrekt? Ich bin mir nicht sicher, ob es ein problem mit meiner Methode, es zu tun, oder wenn es ein problem mit dem struct-layout.

Dank.

  • Versuchen Sie mholt.github.io/json-to-go - das erzeugen können, Gehen struct basiert auf JSON-Eingabe (sofern die JSON richtig formatiert).
  • danke für den link, es scheint, es ist ein toller service.
  • das gibt mir eine Struktur, die voll von jeder einzelnen saite, die ich verwenden in der struct. Ich dachte, es kann möglich sein, nur sammeln Sie alle in ein 'Colleges' array von einer Art, und dann Zugriff auf alle von Ihnen in einer Schleife? Vielleicht ist das nicht möglich und ich habe eine große und sehr spezifische Struktur, weiß ich nicht.
  • Ohne zu sehen, die ganze Datei (oder eine minimale Darstellung) es ist schwer zu schlagen eine bessere format. Können Sie einen link auf das schema? Oder aktualisieren Sie Ihre Frage mit einem (komplett) Stichprobe. Mein Vorschlag wäre ja sonst zu machen separate Strukturen für jede array-und dann Betten Sie Sie in eine "top-level-Struktur, die repräsentiert das ganze schema.
  • Ich habe gerade aktualisiert die Beispiel-etwas ein wenig größer. Es wird sein, dass format. Es wird ungefähr 5 colleges und dann innerhalb dieser Hochschulen werden zahlreiche Schulen (im Bereich von 4 - 10 in verschiedenen colleges), und jede Schule wird eine eindeutige Zeichenfolge-Schlüssel zugeordnet. Irgendwelche Ideen auf, eine Struktur, die format für diesen?
InformationsquelleAutor Conor | 2015-07-24
Schreibe einen Kommentar