将此json字符串解析为字符串数组c#

时间:2012-12-05 10:58:44

标签: c# arrays json parsing

感觉就像我想要做的那样有一两行解决方案: 解析这样的字符串:

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

这样的事情:

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

最简单的方法是什么?

4 个答案:

答案 0 :(得分:22)

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();

答案 1 :(得分:4)

你也可以使用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#
Lib:http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx

答案 2 :(得分:3)

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

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

答案 3 :(得分:2)

看起来您的输入字符串是JSON字符串,如果需要,可以使用JSON反序列化器。如果不是,您可以将regular-expression与named-groups一起使用,如下所示:

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();

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