2017-04-17 19 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

你非常接近。您需要使用JsonPATH通配符[*]佔外value陣列typeOfHair.value[]

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

而且,其結果是:

["TrockenesHaar","JedenHaartyp"] 

樣品fiddle

+0

非常感謝你 – SharpNoiZy

0

我知道指定JSONPath明確的OP但完整起見下面是如何使用LINQ來達到同樣的以JSON:

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