【问题标题】:Find a value of all occurrences from the json string in c#从c#中的json字符串中查找所有出现的值
【发布时间】:2014-11-26 04:36:23
【问题描述】:

我有一个带有一些数据的 JSON 对象,我想获取每次出现特定键名的所有值。是否有任何预定义的方法可以在 JSON 对象中搜索所有出现的键或需要编写用户定义的方法?

Json 示例

[{"id":"23","name":"sunny","className":"2","class" :{"className":"1","class2" :{"className":"3","class" :{"className":"4"}}}}]

【问题讨论】:

  • 请提供更多您需要的详细信息和示例数据。
  • 我想找到键名 'xyz' 的值,它可以出现在 json 对象中的任何位置,并且不存在任何时间。
  • 您的 json 数据是否有嵌套对象或数组项?如果您在问题中输入一些数据,那就太好了。这将有助于我和其他人很好地理解您的问题。
  • 请提供示例 JSON 以帮助澄清您的问题。
  • 是的,我的 json 对象是嵌套的。并且密钥可能出现在我的 json 对象中的任何级别,

标签: c# json search


【解决方案1】:

这可以通过使用带有递归路径 ..classNameSelectTokens 方法使用 LINQ to JSON 来实现

class Program
{
    static void Main(string[] args)
    {
        JObject jObject = JObject.Parse(jsonString);

        // You would use this because you have an array.
        // JArray jObject = JArray.Parse(jsonArray);

        // .. - recursive descent
        var classNameTokens = jObject.SelectTokens("..className"); 
        var values = classNameTokens.Select(x => (x as JValue).Value);
    }

    static string jsonString = @"{'id':'23','name':'sunny','className':'2','class' :{'className':'1','class2' :{'className':'3','class' :{'className':'4'}}}}";
    static string jsonArray = @"[{'id':'23','name':'sunny','className':'2','class' :{'className':'1','class2' :{'className':'3','class' :{'className':'4'}}}}]";
}

参考资料:

Json.NET - Documentation - Parsing JSON

Json.NET 6.0 Release 1 - JSONPath and F# Support

JSONPath expressions

【讨论】:

  • 在 c# 中,我有一个带有 JSON 数据的字符串,我想检索名称为“className”的键的所有值。我将发送两个参数 JSON 字符串和键名,我想要键名为“className”的值列表
  • mhmm...抱歉,恐怕我现在不明白你的意思。这段代码有问题吗?
  • 它显示错误路径返回多个令牌@t3chb0t
  • 是的。您必须使用 SelectTokens,因为您对多个结果和递归搜索感兴趣,而不是对找到的第一个结果感兴趣。我是这样理解的。
  • 那我想你可能没有使用最新的json.net?我用 6.0.0.0 版本测试过。
猜你喜欢
  • 2012-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多