2011-02-17 42 views
4

我有一些JSON發送到我的webservice,看起來像這樣。.Net Linq to JSON與Newtonsoft JSON庫

{ 
    root: [ 
     { 
      "key": "foo1", 
      "val": "150" 
     }, 
     { 
      "key": "foo2", 
      "val": "220" 
     }, 
     { 
      "key": "foo3", 
      "val": "300" 
     }, 
     { 
      "key": "dataid", 
      "val": "2289" 
     } 
    ] 
} 

說我想回到的val的值,其中key等於"dataid"。我如何使用JSON.Net庫來做到這一點?

我知道我可以遍歷值來找到它,但很可能該對象將比這裏的示例更大。

在此先感謝

+0

鑰匙是唯一的嗎? – CodesInChaos 2011-02-17 19:14:59

+0

@CodeInChaos - 是的,他們是。 – CResults 2011-02-17 19:19:18

回答

18

東西正經歷在某些時候必須循環。如果你需要從同一個JSON中通過鍵獲取大量的值,你應該從它建立一個Dictionary<string, string> - 這意味着循環一次(明確或使用LINQ ToDictionary方法),但之後有快速訪問。

下面是一些示例代碼:

using System; 
using System.IO; 
using System.Linq; 

using Newtonsoft.Json.Linq; 

class Test 
{ 
    static void Main() 
    { 
     string text = File.ReadAllText("test.json"); 
     JObject obj = JObject.Parse(text); 
     JArray root = (JArray) obj["root"]; 

     var dictionary = root.ToDictionary(x => (string) x["key"], 
              x => (string) x["val"]); 

     Console.WriteLine(dictionary["dataid"]); 
    } 
} 
+0

感謝喬恩 - 真的很感激。 – CResults 2011-02-17 19:13:10

7

喬恩打我給它,但這裏是這樣做的另一種方式:略多LINQ-Y

var json = File.ReadAllText("data.json"); 
var jobject = JObject.Parse(json); 

var item = jobject.Property("root") 
        .Values() 
        .Single(x => x.Value<string>("key") == "foo1"); 

var value = item.Value<string>("val"); 

Console.WriteLine(value); 

,但沒有真正獲得方式如果您使用LINQ to JSON,請去掉魔術字符串。