2016-10-17 10 views
3

次のコードで:Json.net JObject.Parse erroring複雑なJSON

let resp = string(argv.GetValue 0) 

let json =JObject.Parse resp 

は、このエラーを与える:

{ 
    "totalCount":1, 
    "items":[ 
     { 
      "versionName":"2.2.6", 
      "phase":"PLANNING", 
      "distribution":"EXTERNAL", 
      "source":"CUSTOM", 
      "_meta":{ 
       "allow":[ 
       "GET", 
       "PUT", 
       "DELETE" 
       ], 
       "href":"url", 
       "links":[ 
       { 
        "rel":"versionReport", 
        "href":"url" 
       }, 
       { 
        "rel":"project", 
        "href":"url" 
       }, 
       { 
        "rel":"policy-status", 
        "href":"url" 
       } 
       ] 
      } 
     } 
    ] 
    } 

どのよう:argvのは、この入力された

An unhandled exception of type 'Newtonsoft.Json.JsonReaderException' 
occurred in Newtonsoft.Json.dll 

Input string '2.2.6' is not a valid number. 
Path 'items[0].versionName', line 1, position 39. 

私はこれを解決する?ここでエラーが発生しないjsonリーダーを実装する簡単な方法はありますか?この入力で

An unhandled exception of type 'Newtonsoft.Json.JsonReaderException' 
occurred in Newtonsoft.Json.dll 

Error parsing undefined value. Path 'items[0].name', line 1, position 28. 

また、私はこのエラーを取得し、私は私が作るか知らなかった多くの異なるスキーマのJSONを読み込むしようとしています

{ 
    "totalCount":1, 
    "items":[ 
     { 
      "name":"uaa", 
      "projectLevelAdjustments":true, 
      "source":"CUSTOM", 
      "_meta":{ 
       "allow":[ 
        "GET", 
        "PUT", 
        "DELETE" 
       ], 
       "href":"url", 
       "links":[ 
        { 
         "rel":"versions", 
         "href":"url" 
        }, 
        { 
         "rel":"canonicalVersion", 
         "href":"url" 
        } 
       ] 
      } 
     } 
    ] 
} 

。最初のエラーは、文字列として出力する必要があるものから浮動小数点数を生成しようとしているためです。スキーマのような2番目の音は複雑すぎるので、Json.Deserializeを使って適切に解析するには型が必要ですが、その方法はわかりませんし、型を作るのにスキーマが多すぎるので時間がかかるでしょうそれらすべてのために。これらの両方の周りには方法がありますか?

var json = JsonConvert.DeserializeObject(resp) 

をそしてあなたのような何かをプロパティにアクセスできます:

+2

奇妙ですが、あなたのコードは私には例外ではありません –

+2

はい私は例外がありません。あなたが使用すべきコードは 'let json = JsonConvert.DeserializeObject(resp)'です。そして、私は上記の例で値を得ることができます。動作していない場合は、クラッシュするjsonサンプルを提供する必要があります。 – Ringil

+0

編集2が私の答えに追加されました。この問題は他に誰も例外が発生していなければ難解になっています:/ –

答えて

3

C#では、あなたはこのようなものでdynamicを使用することができますjson.totalCount

F#土地でthis questionには、dynamicオブジェクトをどのように扱うかに関するいくつかの提案があります。

let value:obj = json?totalCount?Value 

自分のコンピュータ上で1Lを与える:あなたはこのようなもので、あなたの例ではtotalCountプロパティの値を取得することができFSharp.Interop.Dynamicパッケージを使用している場合。

+0

の構文解析コールの中でプログラムのエラー、私は 'json'変数で何も呼び出すことはありません。 –