2017-04-17 3 views
3

와 나는 거의 한 시간 서로 다른 접근 방식에 대한 시도했지만 나는 그것을 얻지 않는다 (JsonPath이 Newtonsoft.JSON

내 JSON 객체가 이것이다 :

"typeOfHair": { 
    "value": [ 
     { 
      "code": "Dry Hair", 
      "values": [ 
       { 
        "value": "DryHair", 
        "language": "en" 
       }, 
       { 
        "value": "TrockenesHaar", 
        "language": "de" 
       } 
      ] 
     }, 
     { 
      "code": "Any Type of Hair", 
      "values": [ 
       { 
        "value": "AnyTypeOfHair", 
        "language": "en" 
       }, 
       { 
        "value": "JedenHaartyp", 
        "language": "de" 
       } 
      ] 
     } 
    ] 
} 

을 그리고 내 작업을 함께 얻을 수 있습니다 . Newtonsoft.JSON 언어가 모든 값은 "드" 내 현재의 접근 방식은 다음과 같습니다

JsonObject.SelectTokens("typeOfHair.value.values[?(@.language == 'de')].value").ToList() 

사람이 나를 도와 줄 수

?

친절에 대해서

답변

3

당신은 매우 가깝습니다. 결과는,

var values = JsonObject.SelectTokens("typeOfHair.value[*].values[?(@.language == 'de')].value") 
    // Convert from JValue to string 
    .Select(v => (string)v) 
    // Save in a list 
    .ToList(); 

을 그리고 : 당신은 JsonPATH 와일드 카드 연산자 [*]를 사용하여 외부 value 배열 typeOfHair.value[] 고려해야

["TrockenesHaar","JedenHaartyp"] 

샘플 fiddle합니다.

+0

가 대단히 감사합니다 – SharpNoiZy

0

나는 명시 적으로 JSONPath 지정된 영업 이익을 알고 있지만 완전성을 위해 아래의 JSON에 LINQ와 같은을 달성하는 방법은 다음과 같습니다

var values = jObject["typeOfHair"]["value"] 
    .SelectMany(v => v["values"]) 
    .Where(v => (string)v["language"] == "de") 
    .Select(v => (string)v["value"]) 
    .ToList(); 

데모 : https://dotnetfiddle.net/1S4sT4