2017-12-31 177 views
-3

私は以下のjson文字列を持っています。 c#を使用してIDを抽出する最善の方法は何ですか?あなたはコンパイル時の型の安全性、およびdynamicを失うので、私は個人的にdynamicを使用するのではなくていますC#dynamicjsonの文字列からのIDの抽出

using Newtonsoft.Json; 

Int32 GetId() 
{ 
    String jsonStr = "{ \"count\":..."; 

    dynamic jsonBlob = JObject.Parse(jsonStr); 
    return jsonBlob.value[0].id; 
} 

注意を用いることであろう

{ 
    "count":1, 
    "value": [ { 
     "id":35, 
     "projectId": "frfsdf-039a-405b-8835-5ddb00cfsdf9f107", 
     "name":"Default", 
     "pool":{ 
      "id":1, 
      "scope":"8850710d-4558-4f08-8064-38000a03d209", 
      "name":"Default", 
      "isHosted":false, 
      "poolType":"automation" 
     } 
    }] 
} 
+3

http://idownvotedbecau.se/noattempt/ – Amy

+1

[JSON応答を解析する最も簡単な方法](https://stackoverflow.com/q/34043384/3744182)を参照してください。 – dbc

+1

[このスレッド](https://stackoverflow.com/questions/16459155/how-to-access-json-object-in-c-sharp)をチェックします。あなたの質問に答える必要があります! –

答えて

2

JObejct.Parse(str)["value"].First()["id"].Value<string>()

ニュートンソフトは、C#でjsonを扱うのにかなりの方法です。

アレイ内に複数のアイテムを含めることができます。このコードは最初のものです。

+1

私はおそらく最初にFirstOrDefault()を呼び出して、それがnullでないかどうかをテストします。 コレクションが空の場合、First()によってアプリケーションが異常終了することがあります。それ以外は良い答えです –

2

開発時 -cheapest方法1回限りの操作では多少コストがかかるため、Json.NETの独自のトークンオブジェクトを使用して処理することをお勧めします。

JObject root = JObject.Parse(jsonStr); 
JToken idToken = root.Properties["value"].GetChildren().First().Properties["id"]; 
return idToken.ToObject<Int32>(); 

最後に、あなたは常に独自のクラスを定義し、そのようにデシリアライズすることができます:

class Foo { 
    public Int32 Count { get; set; } 
    public FooValue[] Value { get; set; } 
} 
class FooValue { 
    public Int32 Id { get; set; } 
    public Guid ProjectId { get; set; } 
    public String Name { get; set; } 
} 

Foo foo = JsonConvert.Deserialize<Foo>(jsonStr); 
return foo.Value[0].Id; 

をJSON形式は常に一貫性がある場合、あなたは、あなたがNewtonsoftへの依存を避けることができ、他のJSONの処理をされることはありません。正規表現あるいは些細な文字列処理を使用して、JSON(Json.NET):

Newtonsoft.Jsonを使用
Int32 idIdx = jsonStr.IndexOf("\"id\":"); 
if(idIdx == -1) return null; 
Int32 commaIdx = jsonStr.IndexOf(",", idIdx); 
if(commaIdx == -1) return null; 
return jsonStr.Substring(idIdx, commaIdx - idIdx);