Unity C#:将JSON文件解析成数据结构
Unity C#: parse JSON file into data structure
我正在尝试在 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"]
,在上述情况下会 return "What wave characteristic is measured on the vertical axis?"
?
使用 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
我认为您可以使用上面给出的 JSON 在您的应用程序中创建单个数据结构的一种方法是使用视觉 studio.Once 的 "paste special feature" 您 select从编辑菜单中,您可以选择通过粘贴任何有效的 JSON 从 JSON 创建 class。
粘贴您的 JSON 相关问题后,我得到以下 class:-
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 class 由 array.There 个不同的 class 问题和 visual studio 自动创建的与问题和答案相关的问题组成。
您可以使用 JSON.NET 反序列化将 JSON 值反序列化到您的 RootObject 中:
var questions= JsonConvert.DeserializeObject<RootObject>(jsonString);
我正在尝试在 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"]
,在上述情况下会 return "What wave characteristic is measured on the vertical axis?"
?
使用 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
我认为您可以使用上面给出的 JSON 在您的应用程序中创建单个数据结构的一种方法是使用视觉 studio.Once 的 "paste special feature" 您 select从编辑菜单中,您可以选择通过粘贴任何有效的 JSON 从 JSON 创建 class。
粘贴您的 JSON 相关问题后,我得到以下 class:-
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 class 由 array.There 个不同的 class 问题和 visual studio 自动创建的与问题和答案相关的问题组成。
您可以使用 JSON.NET 反序列化将 JSON 值反序列化到您的 RootObject 中:
var questions= JsonConvert.DeserializeObject<RootObject>(jsonString);