例如,我有两个Json:第一个是我从Test Constructor提供的,第二个是我给这样的用户测试的结果(我使用的是JS libriry-survey.js):
第一个:
{
"pages": [
{
"name": "page 1",
"elements": [
{
"type": "checkbox",
"name": "question 1",
"correctAnswer": [
"item1",
"item3"
],
"choices": [
"item1",
"item2",
"item3"
]
},
{
"type": "radiogroup",
"name": "question 2",
"correctAnswer": "item2",
"choices": [
"item1",
"item2",
"item3"
]
}
]
}
]
}
第二个:
{
"question 1":["item3","item1"],
"question 2":"item2"
}
我该如何通过correctAnswer比较这两个Json?
我需要这样的结果: 问题1-错误, 问题2-对。
答案 0 :(得分:0)
正如gsharp用户提到的,您可以使用json.NET来实现。 只需执行以下操作:创建将包含调查表的类:
public class SurveyForm
{
[JsonProperty("pages")]
public IEnumerable<SurveyPage> Pages { get; set; }
}
public class SurveyPage
{
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("elements")]
public IEnumerable<SurveyPageElement> Elements { get; set; }
}
public class SurveyPageElement
{
// I think you can do the rest
}
public class SurveyResult
{
// same as the other classes
}
您注意到JsonProperty
属性吗?使用它来告诉json.NET在哪里可以找到json中的相关属性。实际上,您不需要这样做,因为json.NET可以通过自己的魔术来找到正确的属性,但是我认为自己做是有用的。
然后反序列化两个Json:
var surveyForm = JsonConvert.DeserializeObject<SurveyForm>(surveyFormJson);
var surveyResult = JsonConvert.DeserializeObject<Dictionary<string,IEnumerable<string>>>(surveyResultJson);
编辑:要比较两者,请执行以下操作:
foreach(var page in surveyForm.Pages)
{
foreach(var element in page.Elements)
{
if(element.CorrectAnswers.All(surveyResult[element.Name].Contains))
{
// right
}
else
{
// wrong
}
}
}