2012-12-05 152 views
6

感觉好像有什么我想要做一两排的解决方案: 解析像这样的字符串:解析此JSON字符串到字符串数组C#

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

弄成这个样子:

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

最简单的方法是什么?

回答

18
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(); 
+0

嗨..当我尝试反序列化包含多个对象的json字符串时,此方法抛出异常。有没有办法解决这个问题? – Rajesh

+0

请忽略我上面的评论,JavaScriptSerializer()。DeserializeObject()方法似乎工作正常。 – Rajesh

+0

太棒了。 :)快速和整洁:)'+1'从我。 – sebastian

2

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

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

您还可以使用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

2

它看起来像你输入的字符串是一个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(); 
在正则表达式

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