将这个JSON字符串解析为C#中的字符串数组

8
感觉我需要做的事情有一个简单的解决方案: 解析像这样的字符串:
 "{\"postalcode\":\"12345\",\"postalcity\":\"SOME-CITY\",\"country\":\"UK\",\"box\":false}"

转化为类似于这样的内容:

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

最简单的方法是什么?

5个回答

23
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字符串时,此方法会抛出异常。有没有解决方法? - Rajesh
请忽略我的评论,JavaScriptSerializer().DeserializeObject() 方法似乎正常工作。 - Rajesh
太棒了。 :) 快速而整洁 :) 我给你点赞。 - sebastian

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

我找到了另一个相关的帖子:C#中将JSON转换为字符串数组
库:http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx

4

看起来您的输入字符串是一个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对象中获取。


3
你可以使用JavaScriptSerializer将JSON序列化为dynamic对象,这样你就能通过名称访问属性。
var address = new JavaScriptSerializer().Deserialize<dynamic>(json);
Console.WriteLine(address["postalcode"]);

0

我刚遇到了类似的兔子洞。这个方法帮助了我,而且不需要安装其他的.dll文件。希望能对某些人有所帮助。

using System.Text.Json.Nodes;

public static string cSettings = AppDomain.CurrentDomain.BaseDirectory + @"\Application_Settings.json";

public static void Read_JSON() 
{
   string read = File.ReadAllText(cSettings);

   var jsonObject = JsonNode.Parse(read);

   var appname = jsonObject["appname"];

   MessageBox.Show(appname.ToString());
}

//output: my test app

Application_Settings.json


{
  "appname": "my test app",
  "version": "1.0.003",
  "id": null,
  "firstrun": null,
  "firstname": "t",
  "lastname": "t",
  "email": "some@gmail.com",
  "cpu1id": "F00A20F10",
  "cpu1key": null,
  "gamingpc": false
}

我找到这个参考链接的地方。

我正在使用 Visual Studio 2022 C#。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接