Сравните два Jsons - PullRequest
       4

Сравните два Jsons

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

Например, у меня есть два Jsons: первый, который я дал от Test Constructor, второй, который я дал такому пользовательскому результату теста (я использую JS libriry - survey.js):

The First:

{
 "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"
     ]
    }
   ]
  }
 ]
}

The Second:

{
"question 1":["item3","item1"],
"question 2":"item2"
}

Как мне сравнить этих двух Jsons по правильному ответу?

Мне нужен результат такой: вопрос 1 - неверныйвопрос 2 - верно.

1 Ответ

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

Как отметил пользователь 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 делает некоторую магию, чтобы найти правильные свойства самостоятельно, но я думаю, что это полезно сделать самостоятельно.

Затем десериализовать два Jsons:

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
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...