【问题标题】:Parse this json string to string array c#将此json字符串解析为字符串数组c#
【发布时间】:2012-11-23 04:30:06
【问题描述】:

感觉对于我想做的事情有一个两行的解决方案: 解析这样的字符串:

 "{\"postalcode\":\"12345\",\"postalcity\":\"SOME-CITY\",\"country\":\"UK\",\"box\":false}"

变成这样:

    string[] result = { "12345", "SOME-CITY", "UK", "false" };

最简单的方法是什么?

【问题讨论】:

    标签: c# arrays json parsing


    【解决方案1】:
    string json = "{\"postalcode\":\"12345\",\"postalcity\":\"SOME-CITY\",\"country\":\"UK\",\"box\":false}";
    
    var dict = new JavaScriptSerializer().Deserialize<Dictionary<string,object>>(json);
    var postalCode = dict["postalcode"];
    
    //Array is also possible
    string[] result = dict.Select(kv => kv.Value.ToString()).ToArray();
    

    【讨论】:

    • 嗨 .. 当我尝试反序列化包含多个对象的 json 字符串时,此方法会引发异常。有办法解决吗?
    • 请忽略我上面的评论,JavaScriptSerializer().DeserializeObject() 方法似乎工作正常。
    • 太棒了。 :) 快速整洁 :) 来自我的“+1”。
    【解决方案2】:

    您也可以使用 newtonsoft :http://james.newtonking.com/pages/json-net.aspx

    string json = @"{
      ""Name"": ""Apple"",
      ""Expiry"": new Date(1230422400000),
      ""Price"": 3.99,
      ""Sizes"": [
        ""Small"",
        ""Medium"",
        ""Large""
      ]
    }";
    
    JObject o = JObject.Parse(json);
    
    string name = (string)o["Name"];
    // Apple
    
    JArray sizes = (JArray)o["Sizes"];
    
    string smallest = (string)sizes[0];
    // Small
    

    我发现另一个相关帖子:JSON to string array in C#
    库:http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx

    【讨论】:

      【解决方案3】:

      看起来您的输入字符串是 JSON 字符串,如果需要,您可以使用 JSON 反序列化器。如果没有,您可以使用正则表达式和命名组,如下所示:

      List<string> values = new List<string>();
      List<string> keys= new List<string>();
      
      string pattern = @"\""(?<key>[^\""]+)\""\:\""?(?<value>[^\"",}]+)\""?\,?";
      foreach(Match m in Regex.Matches(input, pattern))
      {
          if (m.Success)
          {
              values.Add(m.Groups["value"].Value);
              keys.Add(m.Groups["key"].Value);
          }
      }
      
      var result = values.ToArray();
      

      正则表达式中的命名组由(?&lt;group-name&gt;pattern) 表示。在上述模式中,我们有两个命名组:keyvalue,它们可以使用 Groups 索引器从 Match 对象中获取。

      【讨论】:

        【解决方案4】:

        您可以使用 JavaScriptSerializer 将 json 序列化为 dynamic 对象,这将允许您通过名称访问属性,例如

        var address = new JavaScriptSerializer().Deserialize<dynamic>(json);
        Console.WriteLine(address["postalcode"]);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多