我有一些JSON发送到我的webservice,看起来像这样。
{
root: [
{
"key": "foo1",
"val": "150"
},
{
"key": "foo2",
"val": "220"
},
{
"key": "foo3",
"val": "300"
},
{
"key": "dataid",
"val": "2289"
}
]
}
我想要返回val
的值key
等于"dataid"
。我如何使用JSON.Net库?
我知道我可以遍历这些值来找到它但是这个对象可能比这个例子要大得多。
提前致谢
答案 0 :(得分: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"]);
}
}
答案 1 :(得分:7)
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-y,但如果你使用LINQ to JSON,就没有办法真正摆脱魔法字符串。