web-dev-qa-db-ja.com

JSON.netでJTokenの名前/キーを取得する

このようなJSONがいくつかあります

[
  {
    "MobileSiteContent": {
      "Culture": "en_au",
      "Key": [
        "NameOfKey1"
      ]
    }
  },
  {
    "PageContent": {
      "Culture": "en_au",
      "Page": [
        "about-us/"
      ]
    }
  }
]

これをJArrayとして解析します。

var array = JArray.Parse(json);

次に、配列をループします。

foreach (var content in array)
{

}

contentJTokenです

各アイテムの「名前」または「キー」を取得するにはどうすればよいですか?

たとえば、「MobileSiteContent」または「PageContent」

67
Alex

JTokenは、JObjectJArrayJPropertyJValueなどの基本クラスです。Children<T>()メソッドを使用して、フィルターを取得できます特定のタイプのJTokenの子のリスト、たとえばJObject。各JObjectにはJPropertyオブジェクトのコレクションがあり、Properties()メソッドを介してアクセスできます。 JPropertyごとに、Nameを取得できます。 (もちろん、必要に応じてValueを取得することもできます。これは別のJTokenです。)

すべてをまとめると:

JArray array = JArray.Parse(json);

foreach (JObject content in array.Children<JObject>())
{
    foreach (JProperty prop in content.Properties())
    {
        Console.WriteLine(prop.Name);
    }
}

出力:

MobileSiteContent
PageContent
108
Brian Rogers

JObjectのデフォルトのイテレータは、キー/値のペアを反復処理する辞書です。

JObject obj = JObject.Parse(response);
foreach (var pair in obj) {
    Console.WriteLine (pair.Key);
}
19
Brandin Perry
JObject obj = JObject.Parse(json);
var attributes = obj["parent"]["child"]...["your desired element"].ToList<JToken>(); 

foreach (JToken attribute in attributes)
{   
    JProperty jProperty = attribute.ToObject<JProperty>();
    string propertyName = jProperty.Name;
}
18
Priyanka Lad