Lấy tên / khóa của JToken với JSON.net


81

Tôi có một số JSON trông như thế này

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

Tôi phân tích cú pháp này dưới dạng JArray:

var array = JArray.Parse(json);

Sau đó, tôi lặp lại mảng:

foreach (var content in array)
{

}

content là một JToken

Làm cách nào để lấy "tên" hoặc "khóa" của từng mục?

Ví dụ: "MobileSiteContent" hoặc "PageContent"

Câu trả lời:


128

JTokenlà lớp cơ sở cho JObject, JArray, JProperty, JValue, vv Bạn có thể sử dụng các Children<T>()phương pháp để có được một danh sách lọc của trẻ em của JToken mà là của một loại nhất định, ví dụ JObject. Mỗi JObjectcó một tập hợp các JPropertyđối tượng, có thể được truy cập thông qua Properties()phương thức. Đối với mỗi JProperty, bạn có thể nhận được nó Name. (Tất nhiên bạn cũng có thể nhận được Valuenếu muốn, đó là một cái khác JToken.)

Kết hợp tất cả lại với nhau, chúng ta có:

JArray array = JArray.Parse(json);

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

Đầu ra:

MobileSiteContent
PageContent

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

22

Trình vòng lặp mặc định cho JObject giống như một từ điển lặp qua các cặp khóa / giá trị.

JObject obj = JObject.Parse(response);
foreach (var pair in obj) {
    Console.WriteLine (pair.Key);
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.