Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Редактирование JSON файла (https://javascript.ru/forum/misc/80908-redaktirovanie-json-fajjla.html)

maplol123@gmail.com 24.08.2020 16:28

Редактирование JSON файла
 
Я сделал таблицу в Excel и конвентировал ее в JSON, и у меня получилось вот так:
[
  {
  "QUESTION": "61771",
  "ANSWERS": "2772718",
  "CORRECT": "1,2,3,4"
  },
  {
    "ANSWERS": "7271717"
  },
  {
    "ANSWERS": "272727"
  },
  {
    "ANSWERS": "6271717"
  },
  {
    "QUESTION": "716171781",
    "ANSWERS": "6171717",
    "CORRECT": "1,2"
  },
  {
    "ANSWERS": "7171616"
  },
  {
    "ANSWERS": "287272"
  }
]

Возможно ли сделать примерно вот так? Чтоб все "ANSWERS", которые ниже "QUESTION" входили в состав одного "ANSWERS".
[
  {
  "QUESTION": "61771",
  "ANSWERS": ["2772718 ",
     "7271717",
     "272727",
     "6271717"],
  "CORRECT": [1,2,3,4]
  },
  {
    "QUESTION": "716171781",
    "ANSWERS": ["6171717",
      "7171616",
      "287272"],
    "CORRECT": [1,2]
  },
]

Если потребуется, я могу скинуть весь JSON файл (около 1000 вопросов)

voraa 24.08.2020 17:21

<!DOCTYPE html>
<htmll lang="ru">
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
</style>

</style>
</head>
<body>
<textarea id=ijs rows=15 cols=40 placeholder="Copy your JSON here"></textarea>
<br><br>
<button id=bt>Correct JSON</button>
</body>
<script>
const correctJson = (ojso) =>{
	const njso = [];
	let tmpo = null;
	for (let ob of ojso) {
		if ('QUESTION' in ob) {
			if (tmpo) njso.push(tmpo);
			tmpo = {QUESTION: ob.QUESTION, ANSWERS:[ob.ANSWERS], CORRECT:ob.CORRECT.split(',').map(v => +v)}
		} else {
			tmpo.ANSWERS.push(ob.ANSWERS)
		}
	}
	if (tmpo) njso.push(tmpo);
	return njso;
}

document.getElementById('bt').addEventListener('click', () => {
	const oldJson = JSON.parse(document.getElementById('ijs').value)
	document.getElementById('ijs').value = JSON.stringify(correctJson(oldJson))
})
</script>
</html>

рони 24.08.2020 17:34

maplol123@gmail.com,
<script>
const data = [{
        "QUESTION": "61771",
        "ANSWERS": "2772718",
        "CORRECT": "1,2,3,4"
    },
    {
        "ANSWERS": "7271717"
    },
    {
        "ANSWERS": "272727"
    },
    {
        "ANSWERS": "6271717"
    },
    {
        "QUESTION": "716171781",
        "ANSWERS": "6171717",
        "CORRECT": "1,2"
    },
    {
        "ANSWERS": "7171616"
    },
    {
        "ANSWERS": "287272"
    }
]
const createData = data => {
    let totall = [], ar = [];
    for (let {QUESTION, ANSWERS, CORRECT} of data) {
        if (QUESTION) {
            ar = ANSWERS = [ANSWERS];
            CORRECT = CORRECT.split(/\D+/).map(a => Number(a));
            totall.push({QUESTION, ANSWERS, CORRECT})
        } else ar.push(ANSWERS)
    }
    return totall
}
document.write(JSON.stringify(createData(data)))
  </script>

maplol123@gmail.com 24.08.2020 19:17

рони, voraa, спасибо большое, очень-преочень выручили!


Часовой пояс GMT +3, время: 00:43.