2016-05-10 3 views
0

私は、NewtonsoftパッケージでJSON文字列を解析しようとしています。
「Elite Dangerous Companion」インターフェースからのものです。
すべてがうまく見えましたが、今では結果として得られるJSONオブジェクトに2つの配列が存在しないことが確認されました。
JSONの解析 - 一部の配列が見付かりません

解析のための私のコード:

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

あなたはthe JSON-string hereをダウンロードすることができます。

足りない部分が

"lastStarport" です - "船" - "shipyard_list"

"lastStarport" - "船" - "unavailable_list"

文字列をでオンライン解析するとhttps://jsonformatter.curiousconcept.com/ すべてのデータが表示されます。

誰が間違っているのか、欠けているデータを取得する方法を知っていますか?

は、他の人にあなたの

+0

、1のために、それはSOガイドラインに従って、質問にあなたのJSONを投稿してください。 2つのランダムなウェブサイトからランダムなファイルをダウンロードしているわけではありません。第二に、 'JObject'を検査した結果を投稿できますか?配列はそこにあり、アクセス方法はわかりません。 'JObject'はすべてを拾う必要があります。あなたが' DeserializeObject 'を使っているようではなく、モデルとjsonの間にいくつかの相違があります。 – evanmcdonnal

+0

申し訳ありませんが、json文字列があまりにも大きいため、ここに投稿するには大きすぎます(119KB)。 – Duke

+0

[PasteBin](http://pastebin.com/)のようなものにJSONを置くだけです。登録されていないユーザーの場合、最大512 KBまで可能です。 JSONファイルが119 KBの場合は、問題の原因となっている行番号を指摘すれば、本当に役立ちます。 ;) – Chrono

答えて

0

注意を感謝:JSONファイルは7400+行の長さであることを、あなたがいることは多分OPはペーストビンまたはその代わりに何かして投稿することができ、直接掲載したい場合ので、私は知りません。

Newtonsoft.Jsonの.NETバージョンとバージョンは何ですか?私は.NET 4.5.2とNewtonsoft.Jsonバージョン8.0.3を使ってみましたが、私はこれらのオブジェクトにうまく行きました。

私は次のことを実行しました:

 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"]); 

、それは間違いなく出力いくつかのデータを。あなたがファイルに投稿したものとあなたのresponse.Jsonプロパティとの間に何か違いがありますか?

+0

私は.net 4.6を使用していて、NuGetインストーラは "Newtonsoft v8.0.3"と答えています。 インストールされている "Newtonsoft.json.dll"のプロパティを確認すると、 が表示されますが、v6.0.8.18.111しか見ることができません。 これが正しいですか? – Duke

+0

Mineのバージョンは8.0.0.0、ランタイムバージョンはv4.0.30319です。フレームワークを4.6に変更するように更新しましたが、それでも正常に動作するようです。おそらく参照を完全に削除してNuGet経由で再インストールする必要がありますか? – KSib

+0

hm、strange。私はすでにnugetマネージャーとnewtonsoftパッケージを再インストールしました。上記のコードをテストしましたが、m_joCompanion ["lastStarport"] ["ships"]を取得しようとすると "null"になります。今私は眠りにつきます、明日はもっと良い日です。 – Duke

0

OK :-)してみてください、私はVSが間違ったDLLのバージョン(理由を知りません)を保持しているが分かりました。
はしかし、今私は、正しいバージョン(binパスで見つかったv8.0.3.19514)に取り組んでいます - これは、私はテストのために、以下のなかった

:-(私の問題は解決しませんでした:

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

と私はオブジェクトのため、この出力/ヒントを得た:

  • lastStarportは6でなければなりません(5人の子供を持っています!)
  • 子1: "ID": "3226125568"
  • 子2: "名前": "田中ターミナル"
  • 子3: "派閥": "独立"
  • 子4: "商品" :[]
  • 子供5: "モジュール":{}

しかし、私は、私は問題が何であるか見当がつかないなし[船]データまたはそのサブ構造の1

を得ませんでした。あなたはヒントを持っていますか?

EDIT:
私がやったhttps://jsonformatter.curiousconcept.com/ 切り替え標準で別のthest:

RFC 7159:5人の子供
RFC(/船-データO W)4627:6人の子供(船舶・データ既存)

これをNewtonsoftで切り替えることはできますか?

EDIT 2

私はこれを試してみましたが、それは動作します!

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

しかし、私はまだunterstandない.Parse() と古いバージョンが私のシステム上で動作しない理由: -/

関連する問題