2016-02-29 140 views
-2

我不想寫循環..我想看到可用的所有選項(使用LINQ,SelectTokens,JSON.NET或任何其他的一些工具),讓我/一個數組對象相對於返回東西在裏面。例如:如何查詢json子對象並返回整個父對象?

{ 
    "theFamilies": [{ 
     "parent1": "Joe", 
     "parent2": "Mary", 
     "child1": "Andy" 
    }, { 
     "parent1": "Bob", 
     "parent2": "Mary", 
     "child1": "Mark" 
    }] 
} 

返回整個對象(一個或多個),它們包含"parent2" = "Mary"的列表。

如果..嵌套被更深層次的?有沒有一種很好的方法來避免/忽略嵌套深度,並遞歸地獲得滿足條件的所有條件,而不需要任何編碼更改?

有關利益或每個解決方案的利弊任何評論都將特別讚賞。

回答

-2

您的數據似乎是Family對象的數組。您可以爲此創建一個poco,並使用LINQ在將json反序列化爲C#類型之後選擇匹配。喜歡的東西可以使用如下 -

 var t = JsonConvert.DeserializeObject<Families>("json"); 

     var match = t.theFamilies.Where(a => a.parent2 == "Mary").ToList(); 

     public class Families 
     { 
      public List<Family> theFamilies { get; set; } 

     } 

     public class Family 
     { 
      public string parent1 { get; set; } 
      public string parent2 { get; set; } 
      public string child1 { get; set; } 
     } 
+0

_ 「如果...嵌套更深?有沒有避免的好方法/忽略嵌套深度和遞歸得到所有的滿足,不需要任何編碼改變的條件「_ _ – CodeCaster

+0

」如果..嵌套被更深層次的「_ - ?以何種方式 –

+1

我不? 「知道,我不是OP。你的回答但不回答這個問題。 – CodeCaster

1

我猜你正在尋找Json.NET SelectToken

你的情況:

var o = JObject.Parse("{'theFamilies': [{'parent1': 'Joe','parent2': 'Mary','child1': 'Andy'}, {'parent1': 'Bob','parent2': 'Mary','child1': 'Mark'}]}"); 
var res = o.SelectToken("theFamilies[0].parent2"); 

UPD 所有令牌,你應該使用SelectTokens

var res = o.SelectTokens("theFamilies[*].parent2"); 
+0

我不認爲這實際上返回「parent2」=「Mary」的對象列表 –

+0

@nas yep,只有一個令牌 – ad1Dima

+0

@ n-as已更新我的回答,用於收集令牌 – ad1Dima