Pobieranie nazwy / klucza JToken za pomocą JSON.net


82

Mam trochę JSON, który wygląda tak

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

Parsuję to jako JArray:

var array = JArray.Parse(json);

Następnie wykonuję pętlę nad tablicą:

foreach (var content in array)
{

}

content jest JToken

Jak mogę odzyskać „nazwę” lub „klucz” każdego elementu?

Na przykład „MobileSiteContent” lub „PageContent”

Odpowiedzi:


130

JTokenjest klasą bazową dla JObject, JArray, JProperty, JValue, itd. Można użyć Children<T>()metody, aby uzyskać przefiltrowaną listę dzieciom JToken że są pewnego rodzaju, na przykład JObject. Każdy JObjectma kolekcję JPropertyobiektów, do których można uzyskać dostęp za pomocą Properties()metody. Za każdego JPropertymożesz go dostać Name. (Oczywiście możesz również uzyskać w Valuerazie potrzeby, co jest innym JToken.)

Łącząc to wszystko mamy:

JArray array = JArray.Parse(json);

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

Wynik:

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

Domyślnym iteratorem dla JObject jest słownik iterujący po parach klucz / wartość.

JObject obj = JObject.Parse(response);
foreach (var pair in obj) {
    Console.WriteLine (pair.Key);
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.