【问题标题】:What is the JSON.NET equivalent of XML's XPath, SelectNodes, SelectSingleNode?什么是 XML 的 XPath、SelectNodes、SelectSingleNode 的 JSON.NET 等价物?
【发布时间】:2009-11-08 22:37:38
【问题描述】:

目前我的代码结构使用XmlDocument加载Xml数据,然后SelectNodes遍历一个重复项列表。

对于每个元素,我使用XmlNode.SelectSingleNode 来挑选字段元素。

我现在想使用 JSON.NET 来获得与作为 JSON 交付给我的文档相同的结果。答案可以不是 JSON.net,只要它是 C# 可集成的。

【问题讨论】:

    标签: c# json.net


    【解决方案1】:

    Json.NET 有 SelectToken。它使用类似于 DataBinder.Eval 的语法通过字符串表达式获取 JSON:

    JObject o = JObject.Parse("{'People':[{'Name':'Jeff'},{'Name':'Joe'}]}");
    
    // get name token of first person and convert to a string
    string name = (string)o.SelectToken("People[0].Name");
    

    或者如果您想选择多个值:

    JObject o = JObject.Parse("{'People':[{'Name':'Jeff','Roles':['Manager', 'Admin']}]}");
    
    // get role array token of first person and convert to a list of strings
    IList<string> names = (string)o.SelectToken("People[0].Roles").Select(t => (string)t).ToList();
    

    文档:Querying JSON with SelectToken

    【讨论】:

    • 不错!有没有办法以不区分大小写的方式做到这一点?喜欢JToken.GetValue("something", StringComparison.OrdinalIgnoreCase)
    【解决方案2】:

    您有可以映射 JSON 的对象层次结构吗?您可以创建一个对象树(即反序列化 JSON),并使用 LINQ 的 WhereSelectMany 等。

    【讨论】:

    • 感谢马克的回复。具体来说,我使用 twitter.com/status/mentions.json 提要。我想将每个“状态”传递给 HTML Render,而不知道(在构建时)它正在使用哪些字段,并允许它使用 SelectSingleNode 的 Json 版本提取字段。一个 LINQ 示例会很有帮助:)
    • 啊,对。如果这就是您的意思,它不允许您使用任意字符串。每个场景都需要编码。
    猜你喜欢
    • 1970-01-01
    • 2020-02-16
    • 1970-01-01
    • 1970-01-01
    • 2014-06-12
    • 1970-01-01
    • 2022-11-28
    • 1970-01-01
    • 2014-05-08
    相关资源
    最近更新 更多