将此json字符串解析为字符串数组c#
感觉就像我想要做的那样有一个两行的解决方案:解析这样的字符串:
"{\"postalcode\":\"12345\",\"postalcity\":\"SOME-CITY\",\"country\":\"UK\",\"box\":false}"
进入这样的事情:
string[] result = { "12345", "SOME-CITY", "UK", "false" };
这是最简单的方法吗?
string json = "{\"postalcode\":\"12345\",\"postalcity\":\"SOME-CITY\",\"country\":\"UK\",\"box\":false}"; var dict = new JavaScriptSerializer().Deserialize>(json); var postalCode = dict["postalcode"]; //Array is also possible string[] result = dict.Select(kv => kv.Value.ToString()).ToArray();
你也可以使用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
我找到了另一个相关的post: JSON到C#中的字符串数组
Lib: http : //msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx
您可以使用JavaScriptSerializer将json序列化为dynamic
对象,这将允许您通过名称访问属性,例如
var address = new JavaScriptSerializer().Deserialize(json); Console.WriteLine(address["postalcode"]);
看起来您的输入字符串是JSON字符串,如果需要,可以使用JSON反序列化器。 如果不是,您可以使用正则表达式和命名组,如下所示:
List values = new List (); List keys= new List (); string pattern = @"\""(?[^\""]+)\""\:\""?(?[^\"",}]+)\""?\,?"; 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();
正则表达式中的命名组由(?
。 在上面的模式中,我们有两个命名组: key
和value
,可以使用Groups
索引器从Match
对象中获取。