Я очень плохо знаком с программированием и не могу найти решение своей проблемы, не могли бы вы дать мне решение, пожалуйста?
У меня есть этот файл JSON:
{
"groups": "[{ id: 1, title: 'group 1' }, { id: 2, title: 'group 2' }]"
}
И мне нужно что-то вроде этого в моем JS (но я хочу импортировать мой JSON, чтобы получить массив, как это):
const groups = [{ id: 1, title: 'group 1' }, { id: 2, title: 'group 2' }]
Я не знаю, как обойтись без использования JQuery.
Я уже пытался с этим:
const json = require('./test.json');
Этот код возвращает объект:
Это почти то, что я хочу, но оно не работает, когда я использую его в своем коде, потому что я не хочу объект, но и массив, как я уже говорил выше.
Как этого добиться?
Значение groups
недопустимо в формате JSON: строковые значения должны быть заключены в двойные кавычки, как и ключи. Файл с допустимым JSON в этой строке будет выглядеть так:
{
"groups": "[{ \"id\": 1, \"title\": \"group 1\" }, { \"id\": 2, \"title\": \"group 2\" }]"
}
Конечно, если у вас есть контроль над созданием этого файла, было бы лучше иметь это значение как часть собственного содержимого JSON, а не JSON-in-a-string-inside-JSON. Если это невозможно, вам нужно будет исправить цитату в строке самостоятельно, что можно сделать с помощью пары замен регулярных выражений.
/* obj is the object in the JSON file */
var json_str = obj.groups.replace(/'/g,"\"").replace(/([a-z]+)\:/g,"\"$1\":");
var groups = JSON.parse(json_str);
Кроме того, хотя строка не является допустимой JSON, она является допустимым выражением Javascript, поэтому, если содержимое файла заслуживает доверия, вы также можете сделать это с помощью eval:
var groups = eval (obj.groups);
JSON.parse()
, или как обойти это требование с помощью eval()
. Ваш пример начинается с уже исправленной версии строки JSON, поэтому вы забегаете вперед.
Мне просто нужно заполнить мой массив "групп" так:
[{ id: 1, title: 'group 1' }, { id: 2, title: 'group 2' }]
с файлом JSON и без JQuery
Так как я не заметил "без jQuery" в исходном вопросе, вот новый ответ:
var request = new XMLHttpRequest();
request.open('GET', './test.json', true);
request.onload = function() {
if (request.status >= 200 && request.status < 400) {
// Success!
var data = JSON.parse(request.responseText);
} else {
// We reached our target server, but it returned an error
}
};
Это делает две вещи: 1. Загружает файл json 2. Анализирует загруженную строку в объект javascript.
если вы не можете редактировать оригинальный текст, вам нужно заменить "на", а затем сделал JSON.parse(json.groups)
;
в противном случае вы можете немного изменить свой JSON следующим образом:
JSON.parse('[{ "id": 1, "title": "group 1" }, { "id": 2, "title": "group 2" }]')
будьте осторожны с "и" скобками
{
"key":"string"
}
строка с определенным 'круглыми скобками недопустима
в ключах JSON должны быть в "" скобках
Прежде чем вы сможете что-либо сделать со своим файлом JSON, вам необходимо загрузить его. У jQuery есть ярлык, который даже автоматически проанализирует JSON-строку в нативный объект JS для вас:
$.getJSON('./test.json', function(data) {
console.dir(data);
});
Вы можете разобрать объект в массиве следующим образом:
Object.values(YOUR_OBJECT)
документы: https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Object/values
YOUR_OBJECT
является содержимым файла, то вы просто получите массив с одной строкой, описывающей массив. Если это значение ключа groups
, то это приведет к (по сути) бреду, так как вы получаете значения для всех ключей из строки.
JSON.parse(json.groups)