Abrufen des Namens / Schlüssels eines JToken mit JSON.net


82

Ich habe einen JSON, der so aussieht

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

Ich analysiere dies als JArray:

var array = JArray.Parse(json);

Dann durchlaufe ich das Array:

foreach (var content in array)
{

}

content ist ein JToken

Wie kann ich den "Namen" oder "Schlüssel" jedes Elements abrufen?

Zum Beispiel "MobileSiteContent" oder "PageContent"

Antworten:


129

JTokenist die Basisklasse für JObject, JArray, JProperty, JValue, etc. Sie das verwenden können , Children<T>()zum Beispiel Verfahren eine gefilterte Liste eines JToken Kinder zu bekommen, die von einer bestimmten Art sind JObject. Jedes JObjectverfügt über eine Sammlung von JPropertyObjekten, auf die über die Properties()Methode zugegriffen werden kann. Für jeden JPropertykann man seine bekommen Name. (Natürlich können Sie auf ValueWunsch auch das bekommen , was ein anderes ist JToken.)

Alles zusammen haben wir:

JArray array = JArray.Parse(json);

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

Ausgabe:

MobileSiteContent
PageContent

24
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;
}

23

Der Standarditerator für das JObject ist ein Wörterbuch, das über Schlüssel / Wert-Paare iteriert.

JObject obj = JObject.Parse(response);
foreach (var pair in obj) {
    Console.WriteLine (pair.Key);
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.