如何在C#中读取和解析JSON文件?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (644)

我已经花了两天的时间用代码示例等方式“尽情发挥”,尝试在C#中将一个非常大的JSON文件读入一个数组中,以便稍后将其分解为2维数组进行处理。

我遇到的问题是我找不到任何人在做我想做的事情的例子。这意味着我只是编辑代码,希望得到最好的结果。

我已经设法得到一些工作,将会:

  • 读取文件Miss out标题,只读取数组中的值。
  • 在数组的每一行放置一定数量的值。(所以我可以稍后将它分解成2d数组)

这是用下面的代码完成的,但是在向数组中输入几行后,程序崩溃了。这可能与文件大小有关。

// If the file extension was a jave file the following 
// load method will be use else it will move on to the 
// next else if statement
if (fileExtension == ".json") 
{
    int count = 0;
    int count2 = 0;
    int inOrOut = 0;
    int nRecords=1; 
    JsonTextReader reader = new JsonTextReader(new StreamReader(txtLoaction.Text));
    string[] rawData = new string[5];
    while (reader.Read())
    {
        if (reader.Value != null)
            if (inOrOut == 1)
            {
                if (count == 6)
                {
                    nRecords++;
                    Array.Resize(ref rawData, nRecords);
                    //textBox1.Text += "\r\n";
                    count = 0;
                }
                rawData[count2] += reader.Value + ","; //+"\r\n"
                inOrOut = 0;
                count++;
                if (count2 == 500)
                {
                    MessageBox.Show(rawData[499]);
                }
            }
            else
            {
                inOrOut = 1;
            }
    } 
}

我正在使用的JSON片段是:

[ 
    { "millis": "1000", 
      "stamp": "1273010254", 
      "datetime": "2010/5/4 21:57:34", 
      "light": "333", 
      "temp": "78.32", 
      "vcc": "3.54" }, 
] 

我需要这个JSON的值。例如,我需要“3.54”,但我不希望它打印“vcc”。

我希望有人能告诉我如何读取JSON文件,并只提取我需要的数据并将其放入数组中,或者稍后将其放入数组中。

提问于
用户回答回答于

这样做是一个可怕的想法。使用Json.NET。它已经解决了这个问题,比起大多数程序员能够解决这个问题的时间要多几个月才能完成。至于你的具体需求,解析成数组等,请检查文档,特别是JsonTextReader。基本上,Json.NET原生处理JSON数组,并将它们解析为字符串,整数或任何类型碰巧没有你的提示。 这里是读者和作者的基本代码使用的直接链接,所以你可以在学习使用它的同时在备用窗口中打开它。

这是最好的:这次是懒惰的,并使用一个库,所以你永远解决这个常见问题

用户回答回答于

如何让所有的事情变得更容易?

public void LoadJson()
{
    using (StreamReader r = new StreamReader("file.json"))
    {
        string json = r.ReadToEnd();
        List<Item> items = JsonConvert.DeserializeObject<List<Item>>(json);
    }
}

public class Item
{
    public int millis;
    public string stamp;
    public DateTime datetime;
    public string light;
    public float temp;
    public float vcc;
}

你甚至可以在dynamic不声明Item类的情况下获得价值盟友。

dynamic array = JsonConvert.DeserializeObject(json);
foreach(var item in array)
{
    Console.WriteLine("{0} {1}", item.temp, item.vcc);
}

扫码关注云+社区