Чтение файлов JSON, содержащих массивы, с использованием SimpleJSON - PullRequest
0 голосов
/ 04 марта 2019

У меня есть файл JSON, который выглядит как тот, что ниже.Узел «Вопросы» содержит список массивов.Каждый из этих массивов содержит 5 строк.Один вопрос, 4 ответа.Я пытаюсь прочитать информацию с помощью Unity.Встроенная JsonUtility, очевидно, не очень хорошо справляется с массивами во вложенных JSON-файлах, поэтому я попытался использовать SimpleJSON.Это прекрасно работает для создания файла, однако мне не нужна эта функциональность.

Мне нужно извлечь всю информацию из моего файла JSON.Предпочтительно в переменной типа List<List<string>> или Dictionary<string,List<string>>.Файл был создан так:

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());
    }

Я пробовал все виды различных циклов 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);
            }
        }
    }

Если у кого-нибудь есть опыт чтения данных из похожих файлов Json, пожалуйста, дайте мне знать!Я открыт для использования других инструментов, кроме SimpleJSON!

{<br> "Questions":{<br> "0":[<br> "This is the question string itself 0", "Correct answer! 0", "Answer 1 0", "Answer 2 0", "Answer 3 0" ], "1":[<br> "This is the question string itself 1", "Correct answer! 1", "Answer 1 1", "Answer 2 1", "Answer 3 1" ], "2":[<br> "This is the question string itself 2", "Correct answer! 2", "Answer 1 2", "Answer 2 2", "Answer 3 2" ], "3":[<br> "This is the question string itself 3", "Correct answer! 3", "Answer 1 3", "Answer 2 3", "Answer 3 3" ], "4":[<br> "This is the question string itself 4", "Correct answer! 4", "Answer 1 4", "Answer 2 4", "Answer 3 4" ] } }

1 Ответ

0 голосов
/ 05 марта 2019

Попробуйте этот код, используя библиотеку https://www.newtonsoft.com/json для .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
    }
...