我有一些JSON被发送到我的sent服务,看起来像这样。
{
root: [
{
"key": "foo1",
"val": "150"
},
{
"key": "foo2",
"val": "220"
},
{
"key": "foo3",
"val": "300"
},
{
"key": "dataid",
"val": "2289"
}
]
}假设我想返回val的值,其中key等于"dataid"。我该如何使用JSON.Net库来做到这一点?
我知道我可以遍历这些值来找到它,但这个对象很可能会比这里的例子大得多。
提前感谢
发布于 2011-02-18 03:03:20
嗯,在某个时刻,某些东西将不得不循环通过。如果您需要通过键从同一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"]);
}
}发布于 2011-02-18 03:21:17
Jon抢先一步,但这里有另一种方法:
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,就无法真正摆脱魔力字符串。
https://stackoverflow.com/questions/5033178
复制相似问题