JSON-Dateien in C ++ lesen

10

Ich versuche in einer JSON-Datei zu lesen. Bisher habe ich mich auf die Verwendung von jsoncpp konzentriert. Ich bin jedoch sehr neu in C ++ und die Dokumentation ist für mich ziemlich schwer zu verstehen. Könnte jemand vielleicht laienhaft erklären, was es tut?

Sagen Sie, ich habe eine people.json, die so aussieht:

%Vor%

Was passiert, wenn ich das hier lese? Kann ich eine Art Datenstruktur people erstellen, die ich nach Anna und Ben sowie age und profession indexieren kann? Was wäre der Datentyp von people ? Ich dachte, es wäre etwas Ähnliches wie eine (verschachtelte) Map, aber Map-Werte müssen immer den gleichen Typ haben, nicht wahr?

Ich habe vorher mit Python gearbeitet und mein "Ziel" (das für C ++ nicht korrekt gesetzt ist) besteht darin, das Äquivalent eines verschachtelten Python-Wörterbuchs zu erhalten.

    
user3515814 25.08.2015, 13:55
quelle

5 Antworten

7
  1. Ja, Sie können eine verschachtelte Datenstruktur people erstellen, die durch Anna und Ben indiziert werden kann. Sie können es jedoch nicht direkt von age und profession indizieren (ich werde zu diesem Teil im Code gelangen).

  2. Der Datentyp von people hat den Typ Json::Value (der in jsoncpp definiert ist). Sie haben Recht, es ist ähnlich der verschachtelten Karte, aber Value ist eine Datenstruktur, die so definiert ist, dass mehrere Typen gespeichert und zugegriffen werden kann. Es ähnelt einer Karte mit string als Schlüssel und Json::Value als Wert. Es könnte auch eine Karte zwischen einem unsigned int als Schlüssel und Json::Value als Wert sein (im Falle von JSON-Arrays).

Hier ist der Code:

%Vor%

Wie Sie sehen, können Sie das json-Objekt nur basierend auf der Hierarchie der Eingabedaten indizieren.

    
Pooja Nilangekar 25.08.2015, 14:37
quelle
3

Sehen Sie sich das an. Die bequemste Art, mit dem json-Format zu arbeiten, habe ich gefunden. Es ist so konzipiert, dass es sich wie ein STL-Container verhält, was seine Verwendung sehr intuitiv macht.

    
Arsen 11.10.2016 11:03
quelle
1

Grundsätzlich arbeiten Javascript und C ++ nach zwei verschiedenen Prinzipien. Javascript erstellt eine "assoziative Matrix" oder eine Hash-Tabelle, die einen String-Schlüssel, der den Feldnamen darstellt, mit einem Wert vergleicht. C ++ legt Strukturen im Speicher fest, also sind die ersten 4 Bytes eine Ganzzahl, die ein Alter ist, dann haben wir vielleicht eine feste 32 Byte lange Zeichenfolge, die den "Beruf" darstellt.

So wird JavaScript mit Dingen wie "Alter" umgehen, die 18 in einer Aufzeichnung und "neunzehn" in einer anderen sind. C ++ kann nicht. (Allerdings ist C ++ viel schneller).

Wenn wir also mit JSON in C ++ umgehen wollen, müssen wir das assoziative Array von Grund auf aufbauen. Dann müssen wir die Werte mit ihren Typen kennzeichnen. Ist es eine ganze Zahl, ein reeller Wert (wahrscheinlich als "double"), boolean, eine Zeichenkette? Daraus folgt, dass eine JSON C ++ - Klasse ziemlich viel Code enthält. Effektiv implementieren wir ein bisschen Javascript in C ++. Wir geben dann unserem JSON-Parser den JSON als String, und er markiert ihn und gibt uns Funktionen, um den JSON von C ++ abzufragen.

    
Malcolm McLean 11.10.2016 11:14
quelle
0

Leute wie diese speichern

%Vor%

wird Probleme verursachen, besonders wenn verschiedene Völker denselben Namen haben.

Verwenden Sie stattdessen Array, das Objekte wie dieses speichert

%Vor%

so können Sie Objekte aufzählen oder Objekte mit numerischem Index aufrufen. Denken Sie daran, dass JSON Storage-Struktur, nicht dynamisch Sortierer oder Indexer ist. Verwenden Sie in json gespeicherte Daten, um Indizes nach Bedarf zu erstellen und auf Daten zuzugreifen.

    
christian audebert 31.10.2017 14:14
quelle
0

Beispiel (mit vollständigem Quellcode) zum Lesen einer json Konfigurationsdatei:

Ссылка

%Vor%     
Sandesh Kumar Sodhi 04.02.2018 02:47
quelle

Tags und Links