【问题标题】:Unity C#: parse JSON file into data structure [duplicate]Unity C#:将 JSON 文件解析为数据结构 [重复]
【发布时间】:2018-02-04 15:53:50
【问题描述】:

我正在尝试在 Unity C# 中创建一个自定义修订测验程序,它允许用户使用 JSON 文件将问题加载到程序中,结构如下:

{
  "question": [
    {
      "title": "What wave characteristic is measured on the vertical axis?",
      "answers": {
        "correct": "Amplitude",
        "wrong": [
          "Frequency",
          "Period",
          "Speed"
        ]
      }
    },
    {
      "title": "Which of these is a vector quantity?",
      "answers": {
        "correct": "Velocity",
        "wrong": [
          "Speed",
          "Time",
          "Mass"
        ]
      }
    }
  ]
}

我已经设法让我的程序使用 StreamReader 从文件中读取,但在尝试将其放入单个数据结构时遇到了很多麻烦。

我已经看到其他解决方案使用类并为他们的解决方案手动定义结构,但我不知道如何为 a) 像这样复杂的结构和 b) 可以具有任意编号的结构实现这一点其中的项目(我想支持任意数量的问题)。如果最好的方法是定义这些类,我该如何去引用它们里面的项目?过去,我使用 Python 3.6 的 json 库的 json.loads() 函数解析 JSON,并且效果很好,创建了一个我可以轻松使用的单一多维数组/字典结构。

简单地说,我目前有一个字符串,我从一个包含 JSON 数据的文件中读取该字符串。如何将其合成为一个可以轻松访问的数组,例如 questions[question][0]["title"],在上述情况下将返回 "What wave characteristic is measured on the vertical axis?"

【问题讨论】:

标签: c# json parsing unity3d unity5


【解决方案1】:

使用this site 并生成您的模型。

    public class Answers
{
    public string correct { get; set; }
    public List<string> wrong { get; set; }
}

public class Question
{
    public string title { get; set; }
    public Answers answers { get; set; }
}

public class RootObject
{
    public List<Question> question { get; set; }
}

var model = JsonConvert.DeserializeObject<RootObject>(jsonstring);

就是这样

顺便说一句:您也可以在不声明任何模型的情况下动态访问这些属性

var model = JObject.Parse(jsonstring);
var title0 = (string)model["question"][0]["title"];

PS:我用Json.net

【讨论】:

    【解决方案2】:

    我认为您可以使用上面给出的 JSON 在应用程序中创建单个数据结构的一种方法是使用 Visual Studio 的“粘贴特殊功能”。从编辑菜单中选择它后,您可以选择从中创建类JSON 通过粘贴任何有效的 JSON。

    粘贴与问题相关的 JSON 后,我得到以下课程:-

    public class Rootobject
    {
    public Question[] question { get; set; }
    }
    
    public class Question
    {
    public string title { get; set; }
    public Answers answers { get; set; }
    }
    
    public class Answers
    {
    public string correct { get; set; }
    public string[] wrong { get; set; }
    }
    

    单个 Rootobject 类由 Question 数组组成。Visual Studio 自动创建了与 Question 和 Answers 相关的不同类。

    您可以使用 JSON.NET 反序列化将 JSON 值反序列化到您的 RootObject:

    var questions= JsonConvert.DeserializeObject<RootObject>(jsonString);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-01
      • 1970-01-01
      • 2018-12-03
      • 1970-01-01
      相关资源
      最近更新 更多