C# 使用SimpleJSON读取包含数组的JSON文件

C# 使用SimpleJSON读取包含数组的JSON文件,c#,json,unity3d,simplejson,C#,Json,Unity3d,Simplejson,我有一个JSON文件,看起来像下面的那个。“问题”节点包含数组列表。这些数组中的每一个都包含5个字符串。一个问题,四个答案。我试着用Unity来阅读信息。内置的JsonUtility显然不能很好地处理嵌套JSON文件中的数组,因此我尝试使用SimpleJSON。它非常适合创建文件,但是我不需要该功能 我需要从JSON文件中提取所有信息。最好是在变量中,如列表,或字典。文件是这样创建的: public void SerializeData() { JSONObject qu

我有一个JSON文件,看起来像下面的那个。“问题”节点包含数组列表。这些数组中的每一个都包含5个字符串。一个问题,四个答案。我试着用Unity来阅读信息。内置的JsonUtility显然不能很好地处理嵌套JSON文件中的数组,因此我尝试使用SimpleJSON。它非常适合创建文件,但是我不需要该功能

我需要从JSON文件中提取所有信息。最好是在变量中,如
列表
,或
字典
。文件是这样创建的:

public void SerializeData()
    {
        JSONObject questionJson1 = new JSONObject();
        JSONObject questionJson = new JSONObject();

        for (int i = 0; i < 5; i++)
        {
            JSONArray question = new JSONArray();
            question.Add("This is the question string itself " + i);
            question.Add("Correct answer! " + i);
            question.Add("Answer 1 " + i);
            question.Add("Answer 2 " + i);
            question.Add("Answer 3 " + i);
            questionJson1.Add(i+"", question);
        }

        questionJson.Add("Questions",questionJson1);

        File.WriteAllText(path, questionJson.ToString());
    }
public void序列化数据()
{
JSONObject questionJson1=新的JSONObject();
JSONObject questionJson=新的JSONObject();
对于(int i=0;i<5;i++)
{
JSONArray问题=新的JSONArray();
添加(“这是问题字符串本身”+i);
问题。加上(“正确答案!”+i);
问题.加上(“答复1”+i);
问题.加上(“答复2”+i);
问题.加上(“答复3”+i);
问题1.添加(i+“”,问题);
}
添加(“问题”,questionJson1);
File.WriteAllText(路径,questionJson.ToString());
}
我尝试了各种不同的foreach循环来尝试提取数据,但到目前为止还没有成功。以下是我的一个尝试:

public void DeserializeData()
    {
        string jsonString = File.ReadAllText(path);
        JSONObject questions = (JSONObject)JSON.Parse(jsonString);
        print("UNDER HERE");
        foreach(JSONArray s in questions.AsArray[0])
        {
            foreach(KeyValuePair<string, SimpleJSON.JSONNode> t in s)
            {
                print(t.Key + " " + t.Value);
            }
        }
    }
public void反序列化数据()
{
字符串jsonString=File.ReadAllText(路径);
JSONObject问题=(JSONObject)JSON.Parse(jsonString);
打印(“在此下方”);
foreach(JSONArray有问题。AsArray[0])
{
foreach(s中的键值对t)
{
打印(t.Key+“”+t.Value);
}
}
}
如果有人有从类似Json文件读取数据的经验,请告诉我!我愿意使用SimpleJSON以外的其他工具

{
“问题”:{
“0”:[
“这是问题字符串本身0”, “回答正确!0”, “回答10”, “回答20”, “答案30” ], “1”:[
“这是问题字符串本身1”, “回答正确!1”, “答复1”, “答复2 1”, “答复3 1” ], “2”:[
“这是问题字符串本身2”, “回答正确!2”, “答复12”, “答复2”, “答复3 2” ], “3”:[
“这是问题字符串本身3”, “回答正确!3”, “答复13”, “答复2 3”, “答复3” ], “4”:[
“这是问题字符串本身4”, “回答正确!4”, “答复14”, “答复2 4”, “答复3 4” ] } }

使用.NET库尝试以下代码:

using Newtonsoft.Json.Linq;

string json =
   "{\r\n\r\n   \"Questions\":{\r\n\r\n      \"0\":[\r\n\r\n         \"This is the question string itself 0\",\r\n         \"Correct answer! 0\",\r\n         \"Answer 1 0\",\r\n         \"Answer 2 0\",\r\n         \"Answer 3 0\"\r\n      ],\r\n      \"1\":[\r\n\r\n         \"This is the question string itself 1\",\r\n         \"Correct answer! 1\",\r\n         \"Answer 1 1\",\r\n         \"Answer 2 1\",\r\n         \"Answer 3 1 \"\r\n      ],\r\n      \"2\":[\r\n\r\n         \"This is the question string itself 2\",\r\n         \"Correct answer! 2\",\r\n         \"Answer 1 2\",\r\n         \"Answer 2 2\",\r\n         \"Answer 3 2 \"\r\n      ],\r\n      \"3\":[\r\n\r\n         \"This is the question string itself 1\",\r\n         \"Correct answer! 1\",\r\n         \"Answer 1 3\",\r\n         \"Answer 2 3\",\r\n         \"Answer 3 3\"\r\n      ],\r\n      \"4\":[\r\n\r\n         \"This is the question string itself 1\",\r\n         \"Correct answer! 1\",\r\n         \"Answer 1 1\",\r\n         \"Answer 2 1\",\r\n         \"Answer 3 4\"\r\n      ]\r\n    }\r\n}";

    JObject jo = JObject.Parse(json);
    Dictionary<string, List<string>> values = jo.SelectToken("Questions", false).ToObject<Dictionary<string, List<string>>>();

    //This will run 5 times as per your JSON structure
    foreach (var kv in values)
    {
        Console.WriteLine(kv.Value[0]); //Your question
        Console.WriteLine(kv.Value[1]); //Correct Answer
        Console.WriteLine(kv.Value[2]); //Answer 1
        Console.WriteLine(kv.Value[3]); //Answer 2
        Console.WriteLine(kv.Value[4]); //Answer 3
    }
使用Newtonsoft.Json.Linq;
字符串json=
“{\r\n\r\n\'Questions\':{\r\n\r\n\'0\':[\r\n\r\n\'这是问题串本身0\',\r\n\'正确答案!0\',\r\n\'答案10\',\r\n\'答案20\',\r\n\'答案30\',\r\n\'1\':[\r\r\n\r\n\r\n\'这是问题串本身1\',\r\n\'正确答案!1\'\“,\r\n\“答案1\”,\r\n\“答案2 1\”,\r\n\“答案3 1\”\r\n],\r\n\“2\:[\r\n\r\n\“这是问题字符串本身2\”,\r\n\“正确答案!2\”,\r\n\“答案12\”,\r\n\“答案2\”,\r\n\“答案3\”,\r\n\r\r\n\r\n\“这是问题串本身1\”、\r\n\“正确答案!1\”、\r\n\“答案13\”、\r\n\“答案23\”、\r\n\“答案33\”、\r\n\“4\”:[\r\n\r\n\“这是问题串本身1\”、\r\n\“正确答案!1\”、\r\n\“答案11\”、\r\n\“答案21”\“,\r\n\“答案3 4\”\r\n]\r\n}\r\n}”;
JObject jo=JObject.Parse(json);
Dictionary values=jo.SelectToken(“问题”,false).ToObject();
//这将根据JSON结构运行5次
foreach(var kv值)
{
Console.WriteLine(kv.Value[0]);//您的问题
Console.WriteLine(千伏值[1]);//回答正确
Console.WriteLine(千伏值[2]);//答案1
Console.WriteLine(千伏值[3]);//答案2
Console.WriteLine(千伏值[4]);//答案3
}
使用.NET库尝试以下代码:

using Newtonsoft.Json.Linq;

string json =
   "{\r\n\r\n   \"Questions\":{\r\n\r\n      \"0\":[\r\n\r\n         \"This is the question string itself 0\",\r\n         \"Correct answer! 0\",\r\n         \"Answer 1 0\",\r\n         \"Answer 2 0\",\r\n         \"Answer 3 0\"\r\n      ],\r\n      \"1\":[\r\n\r\n         \"This is the question string itself 1\",\r\n         \"Correct answer! 1\",\r\n         \"Answer 1 1\",\r\n         \"Answer 2 1\",\r\n         \"Answer 3 1 \"\r\n      ],\r\n      \"2\":[\r\n\r\n         \"This is the question string itself 2\",\r\n         \"Correct answer! 2\",\r\n         \"Answer 1 2\",\r\n         \"Answer 2 2\",\r\n         \"Answer 3 2 \"\r\n      ],\r\n      \"3\":[\r\n\r\n         \"This is the question string itself 1\",\r\n         \"Correct answer! 1\",\r\n         \"Answer 1 3\",\r\n         \"Answer 2 3\",\r\n         \"Answer 3 3\"\r\n      ],\r\n      \"4\":[\r\n\r\n         \"This is the question string itself 1\",\r\n         \"Correct answer! 1\",\r\n         \"Answer 1 1\",\r\n         \"Answer 2 1\",\r\n         \"Answer 3 4\"\r\n      ]\r\n    }\r\n}";

    JObject jo = JObject.Parse(json);
    Dictionary<string, List<string>> values = jo.SelectToken("Questions", false).ToObject<Dictionary<string, List<string>>>();

    //This will run 5 times as per your JSON structure
    foreach (var kv in values)
    {
        Console.WriteLine(kv.Value[0]); //Your question
        Console.WriteLine(kv.Value[1]); //Correct Answer
        Console.WriteLine(kv.Value[2]); //Answer 1
        Console.WriteLine(kv.Value[3]); //Answer 2
        Console.WriteLine(kv.Value[4]); //Answer 3
    }
使用Newtonsoft.Json.Linq;
字符串json=
“{\r\n\r\n\'Questions\':{\r\n\r\n\'0\':[\r\n\r\n\'这是问题串本身0\',\r\n\'正确答案!0\',\r\n\'答案10\',\r\n\'答案20\',\r\n\'答案30\',\r\n\'1\':[\r\r\n\r\n\r\n\'这是问题串本身1\',\r\n\'正确答案!1\',\r\n\“答案11\”,\r\n\“答案21\”,\r\n\“答案31\”\r\n],\r\n\“答案2\:[\r\n\r\n\“这是问题字符串本身2\”,\r\n\“正确答案!2\”,\r\n\“答案12\”,\r\n\“答案22\”,\r\n\“答案32\”,\r\n],\r\r\n\“3\:[\r\n\r\r\n\r\n\“这是问题串本身1\”、\r\n\“正确答案!1\”、\r\n\“答案13\”、\r\n\“答案23\”、\r\n\“答案33\”、\r\n\“4\”:[\r\n\r\n\“这是问题串本身1\”、\r\n\“正确答案!1\”、\r\n\“答案11\”、\r\n\“答案21”\“,\r\n\“答案3 4\”\r\n]\r\n}\r\n}”;
JObject jo=JObject.Parse(json);
Dictionary values=jo.SelectToken(“问题”,false).ToObject();
//这将根据JSON结构运行5次
foreach(var kv值)
{
Console.WriteLine(kv.Value[0]);//您的