2016-05-10 7 views
0

Ich versuche, eine JSON-Zeichenfolge mit dem Newtonsoft-Paket zu analysieren.
Es ist von der "Elite Dangerous Companion" Schnittstelle.
Alles schien in Ordnung zu sein, aber jetzt habe ich
festgestellt, dass zwei Arrays in dem resultierenden JSON-Objekt nicht vorhanden sind.Analyse von JSON - aber einige Arrays sind verpasst

Mein Code zum Parsen:

String json = response.Json ?? "{}"; 
JObject m_joCompanion = JObject.Parse(json); 

können Sie the JSON-string here herunterladen.

Die fehlenden Teile sind

"lastStarport" - "Schiffe" - "shipyard_list"

und

"lastStarport" - "Schiffe" - "unavailable_list"

Wenn ich die Zeichenfolge online mitanalysierenhttps://jsonformatter.curiousconcept.com/ alle Daten sind sichtbar.

Jeder hat eine Idee, was falsch ist oder wie man die fehlenden Daten bekommt?

danke

+0

Bitte posten Sie Ihre json in der Frage, für eine er die SO-Richtlinien folgt, für zwei lade ich keine zufällige Datei von irgendeiner zufälligen Webseite herunter. Zweitens, können Sie die Ergebnisse der Überprüfung Ihres 'JObject' veröffentlichen? Es scheint mir wahrscheinlich, dass die Arrays da sind und Sie nicht sicher sind, wie Sie darauf zugreifen. 'JObject' sollte alles aufheben, es ist nicht so, dass Sie' DeserializeObject 'verwenden und eine Diskrepanz zwischen Ihrem Modell und json haben, die dies verursachen würde. – evanmcdonnal

+0

Entschuldigung, die JSON-Zeichenfolge ist zu groß, um hier zu posten (119KB). – Duke

+0

Setzen Sie einfach den JSON auf etwas wie [PasteBin] (http://pastebin.com/). Es ermöglicht bis zu 512 KB für nicht registrierte Benutzer. Und wenn die JSON-Datei 119 KB groß ist, hilft es wirklich, wenn Sie auf die Zeilennummern hinweisen, die das Problem verursachen. ;) – Chrono

Antwort

0

Hinweis auf andere: dass JSON-Datei 7400+ Zeilen lang ist, also weiß ich nicht, ob du das direkt gebucht wollen, schreiben vielleicht OP kann stattdessen auf Pastebin oder so etwas.

Welche .NET Version und Version von Newtonsoft.Json verwenden Sie? Ich versuchte mit .NET 4.5.2 und Newtonsoft.Json Version 8.0.3 und ich konnte zu diesen Objekten gut gehen.

lief ich folgendes:

 var jsonText = File.ReadAllText(@"C:\Users\me\Downloads\companion.json"); 
     var m_joCompanion = JObject.Parse(jsonText); 

     Console.WriteLine(m_joCompanion["lastStarport"]["ships"]["shipyard_list"]); 
     Console.WriteLine(m_joCompanion["lastStarport"]["ships"]["unavailable_list"]); 

und es einige Daten auf jeden Fall ausgegeben. Gibt es einen Unterschied in der Codierung oder etwas zwischen dem, was Sie in der Datei im Vergleich zu Ihrer Antwort geschrieben haben.Json-Eigenschaft?

+0

Ich benutze .net 4.6 und der NuGet Installer sagt "Newtonsoft v8.0.3" aber wenn ich die Eigenschaften der installierten "Newtonsoft.json.dll" überprüfe kann ich nur v6.0.8.18.111 sehen. Ist das korrekt? – Duke

+0

Mine sagt 8.0.0.0 und die Laufzeitversion ist v4.0.30319. Ich habe aktualisiert, um das Framework auf 4.6 zu ändern und es scheint immer noch gut zu funktionieren. Vielleicht müssen Sie die Referenz komplett entfernen und über NuGet neu installieren? – KSib

+0

hm, komisch. Ich habe den Nuget-Manager und das Newtonsoft-Paket bereits neu installiert. Ich habe deinen Code von oben getestet und bekomme "null", wenn ich versuche, m_joCompanion ["lastStarport"] ["ships"] zu bekommen!? Ich gehe jetzt schlafen, vielleicht ist morgen ein besserer Tag. – Duke

0

versuchen nächsten :-)

ok, ich VS hält (weiß nicht warum) die falsche DLL-Version herausgefunden.
Allerdings arbeite ich nun auf die richtige Version (v8.0.3.19514 in der Bin Weg gefunden) - aber das ist mein Problem :-(

nicht lösen Ich habe folgende für die Prüfung:

   Debug.Print(m_joCompanion["lastStarport"].Children().Count()); 
       foreach (var item in m_joCompanion["lastStarport"].Children()) 
       { 
        Debug.Print(item.ToString());       
       } 

und ich habe diese Ausgabe/Hinweise für die Objekte:

  • lastStarport hat 5 Kinder (6 sollte sein!)
  • Kind 1: "id": "3226125568"
  • Kind 2: "name": "Tanaka Terminal"
  • Kind 3: "Fraktion": "Independent"
  • Kind 4: "Ist" []
  • Kind 5: "Module": {}

Aber ich habe ist keine [Schiffe] Daten oder eines seiner Unterstrukturen

ich habe keine Ahnung, was das Problem. Hast du Tipps?

EDIT:
Ich habe eine andere thest auf https://jsonformatter.curiousconcept.com/ ein Einschalten des Standard:

RFC 7159: 5 Kinder (w/o Schiffe-Daten)
RFC 4627: 6 Kinder (Schiffe-Daten vorhanden)

Kann ich dies in Newtonsoft wechseln?

EDIT 2

Ich versuchte dies und es funktioniert!

Newtonsoft.Json.Linq.JObject test = JsonConvert.DeserializeObject<Newtonsoft.Json.Linq.JObject>(json); 

Aber ich immer noch nicht, warum unterstand die alte Version mit .Parse() ist auf meinem System nicht funktioniert: -/