比较两个Jsons

时间:2019-03-10 14:30:24

标签: c# json asp.net-mvc

例如,我有两个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-对。

1 个答案:

答案 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
        }
    }
}