JToken의 모든 항목에 대한 액세스
다음과 같은 json 블록이 있습니다.
{
"ADDRESS_MAP":{
"ADDRESS_LOCATION":{
"type":"separator",
"name":"Address",
"value":"",
"FieldID":40
},
"LOCATION":{
"type":"locations",
"name":"Location",
"keyword":{
"1":"LOCATION1"
},
"value":{
"1":"United States"
},
"FieldID":41
},
"FLOOR_NUMBER":{
"type":"number",
"name":"Floor Number",
"value":"0",
"FieldID":55
},
"self":{
"id":"2",
"name":"Address Map"
}
}
}
이 토큰에 포함된 모든 주요 항목을 가져오려면 어떻게 해야 합니까?예를 들어 위의 코드에서 "ADRESS_LOCATION", "LOCATION", "FLOOR_NUMBER" 및 "self"를 사용하고 싶습니다.
캐스트 할 수 있습니다.JToken
에 대해서JObject
그런 다음 를 사용합니다.Properties()
메서드를 사용하여 개체 속성 목록을 가져옵니다.거기서부터 이름을 쉽게 알 수 있어요.
다음과 같은 경우:
string json =
@"{
""ADDRESS_MAP"":{
""ADDRESS_LOCATION"":{
""type"":""separator"",
""name"":""Address"",
""value"":"""",
""FieldID"":40
},
""LOCATION"":{
""type"":""locations"",
""name"":""Location"",
""keyword"":{
""1"":""LOCATION1""
},
""value"":{
""1"":""United States""
},
""FieldID"":41
},
""FLOOR_NUMBER"":{
""type"":""number"",
""name"":""Floor Number"",
""value"":""0"",
""FieldID"":55
},
""self"":{
""id"":""2"",
""name"":""Address Map""
}
}
}";
JToken outer = JToken.Parse(json);
JObject inner = outer["ADDRESS_MAP"].Value<JObject>();
List<string> keys = inner.Properties().Select(p => p.Name).ToList();
foreach (string k in keys)
{
Console.WriteLine(k);
}
출력:
ADDRESS_LOCATION
LOCATION
FLOOR_NUMBER
self
인정된 답변 외에 Newtonsoft 컬렉션에서 직접 반복하는 방법을 보여주는 답변을 드리고 싶습니다.코드 사용량이 적고 컬렉션 변환이 필요 없기 때문에 더 효율적이라고 생각합니다.
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
//Parse the data
JObject my_obj = JsonConvert.DeserializeObject<JObject>(your_json);
foreach (KeyValuePair<string, JToken> sub_obj in (JObject)my_obj["ADDRESS_MAP"])
{
Console.WriteLine(sub_obj.Key);
}
JsonConvert가 자동으로 중첩된 오브젝트를 JToken(내부에는 JObject, JValue 또는 JArray)으로 역직렬화하기 때문에 이 작업을 직접 시작했습니다.
파싱은 다음 원칙에 따라 작동한다고 생각합니다.
모든 오브젝트는 JToken으로 추상화됩니다.
사전이 필요한 JObject에 캐스팅
JToken이 터미널 노드를 나타내며 값인 경우 JValue에 캐스트합니다.
어레이인 경우 JArray에 캐스트
JValue.Value는 를 나타냅니다.필요한 NET 타입
만약 당신이 받고 있는 json의 구조를 알고 있다면, 나는 당신이 받고 있는 json의 구조를 반영하는 클래스 구조를 제안합니다.
그럼 이렇게 부르면 되겠네요
AddressMap addressMap = JsonConvert.DeserializeObject<AddressMap>(json);
(여기서 json은 문제의 json을 포함하는 문자열입니다.)
수신한 json의 포맷을 모르는 경우는, 조금 복잡해지기 때문에, 수동으로 해석할 필요가 있습니다.
자세한 것은, http://www.hanselman.com/blog/NuGetPackageOfTheWeek4DeserializingJSONWithJsonNET.aspx 를 참조해 주세요.
언급URL : https://stackoverflow.com/questions/16795045/accessing-all-items-in-the-jtoken
'programing' 카테고리의 다른 글
JSON 직렬화 데이터를 NSDictionary로 변환하는 방법 (0) | 2023.02.25 |
---|---|
Android의 JSON - 시리얼화 (0) | 2023.02.25 |
Angular에서 반복된 요소의 합계 계산JS ng 반복 (0) | 2023.02.25 |
카트 표시 중 배송 국가 가져오기 - WooCommerce (0) | 2023.02.25 |
Angular 2의 $compile과 동등 (0) | 2023.02.25 |