首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Newtonsoft JSON库的.Net Linq to JSON

使用Newtonsoft JSON库的.Net Linq to JSON
EN

Stack Overflow用户
提问于 2011-02-18 02:47:11
回答 2查看 18.3K关注 0票数 4

我有一些JSON被发送到我的sent服务,看起来像这样。

代码语言:javascript
复制
{
    root: [
        {
            "key": "foo1",
            "val": "150"
        },
        {
            "key": "foo2",
            "val": "220"
        },
        {
            "key": "foo3",
            "val": "300"
        },
        {
            "key": "dataid",
            "val": "2289"
        }
    ]
}

假设我想返回val的值,其中key等于"dataid"。我该如何使用JSON.Net库来做到这一点?

我知道我可以遍历这些值来找到它,但这个对象很可能会比这里的例子大得多。

提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-18 03:03:20

嗯,在某个时刻,某些东西将不得不循环通过。如果您需要通过键从同一JSON获取大量值,您可能应该从它构建一个Dictionary<string, string> -这意味着在它上面循环一次(显式或使用LINQ ToDictionary方法),但随后可以快速访问。

下面是一些示例代码:

代码语言:javascript
复制
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"]);
    }
}
票数 18
EN

Stack Overflow用户

发布于 2011-02-18 03:21:17

Jon抢先一步,但这里有另一种方法:

代码语言:javascript
复制
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,就无法真正摆脱魔力字符串。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5033178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档