【问题标题】:How can I parse such json string我怎样才能解析这样的json字符串
【发布时间】:2016-05-10 18:41:28
【问题描述】:

我从 webclient 收到一个 json 字符串,如下所示:

"{\"1\": \"on\", \"2\": \"on\"}"

现在我应该将它转换为一些结构并获取值,关键是值不固定,可能是这样的:

"{\"1\": \"on\", \"2\": \"on\", \"3\": \"off\"}"

或者这个

"{\"1\": \"on\", \"2\": \"off\", \"3\": \"on\", \"4\": \"on\"}"

所以我的问题是如何解析这样的字符串。我需要获取“on”的值。

谢谢

【问题讨论】:

  • 您需要反序列化为Dictionary<string, object>,因为C# 中的成员不能以数字开头。
  • 您两次转换为 json,向我们展示您转换为 json 的代码
  • 下面的答案有帮助吗?

标签: c# json


【解决方案1】:

您可以使用 JSON.Net (http://www.newtonsoft.com/json),它也可用于 NuGet。

JObject obj = JObject.Parse("{\"1\": \"on\", \"2\": \"on\", \"3\": \"off\"}");
        var val = (string)obj.Descendants()
                   .OfType<JProperty>()
                   .Where(x => x.Value.ToString() == "on")
                   .First().Name;

这将为您提供第一个值为“on”的节点

【讨论】:

    【解决方案2】:

    对此的依赖是:Newtonsoft.Json,Newtonsoft.Json.Linq; http://www.newtonsoft.com/json

    您可以使用以下代码找到on的值。

     //var test = "{\"1\": \"on\", \"2\": \"on\"}";
    
    //var test = "{\"1\": \"on\", \"2\": \"on\", \"3\": \"off\"}";
    
    var test = "{\"1\": \"on\", \"2\": \"off\", \"3\": \"on\", \"4\": \"on\"}";
    
    JObject obj = JObject.Parse(test);
    
    foreach (var pair in obj)
    {
      if (obj[pair.Key].ToString() == "on")
      {
        Console.WriteLine(pair.Key);
      }
    }
    

    【讨论】:

    • 是的。两种方式都可以。 Linq 或查询
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-03
    相关资源
    最近更新 更多