Как преобразовать объект в массив js [duplicate]

1

Я очень плохо знаком с программированием и не могу найти решение своей проблемы, не могли бы вы дать мне решение, пожалуйста?

У меня есть этот файл 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');

Этот код возвращает объект: Изображение 174551

Это почти то, что я хочу, но оно не работает, когда я использую его в своем коде, потому что я не хочу объект, но и массив, как я уже говорил выше.

Как этого добиться?

  • 5
    Вы ищете JSON.parse(json.groups)
  • 1
    Я чувствую, что что-то упустил, вы просто хотите JSON.parse?
Показать ещё 11 комментариев
Теги:

6 ответов

3

Значение 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);
  • 0
    Почти, но вам не нужно избегать косой черты или заменить. Рабочий пример: codepen.io/anon/pen/dwjBdb
  • 0
    @ suncat100 Я не уверен, что ты имеешь в виду? Двойные кавычки в строке с одинарными кавычками не требуют экранирования обратной косой черты, но строка с одинарными кавычками не является допустимым JSON, поэтому файл запрашивающего не может быть изменен таким образом и все же будет действительным файлом JSON. Мой ответ показывает, как преобразовать строку в допустимый JSON, чтобы ее можно было передать в JSON.parse() , или как обойти это требование с помощью eval() . Ваш пример начинается с уже исправленной версии строки JSON, поэтому вы забегаете вперед.
Показать ещё 2 комментария
0

Мне просто нужно заполнить мой массив "групп" так:

[{ id: 1, title: 'group 1' }, { id: 2, title: 'group 2' }]

с файлом JSON и без JQuery

0

Так как я не заметил "без 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.

-1

если вы не можете редактировать оригинальный текст, вам нужно заменить "на", а затем сделал JSON.parse(json.groups);

в противном случае вы можете немного изменить свой JSON следующим образом:

JSON.parse('[{ "id": 1, "title": "group 1" }, { "id": 2, "title": "group 2" }]')

будьте осторожны с "и" скобками

{
  "key":"string"
}

строка с определенным 'круглыми скобками недопустима

в ключах JSON должны быть в "" скобках

  • 0
    я сделал, но у меня есть эта ошибка сейчас Uncaught SyntaxError: Неожиданный токен o в JSON на позиции 1 в JSON.parse (<анонимный>)
  • 0
    потому что вам нужно "чтобы"
Показать ещё 2 комментария
-2

Прежде чем вы сможете что-либо сделать со своим файлом JSON, вам необходимо загрузить его. У jQuery есть ярлык, который даже автоматически проанализирует JSON-строку в нативный объект JS для вас:

$.getJSON('./test.json', function(data) {
  console.dir(data);
});

https://api.jquery.com/jquery.getjson/

  • 0
    я сказал без jquery ^^
  • 0
    Ок извини В любом случае вам нужно сделать ДВА: 1) загрузить файл с помощью Ajax (XMLHttpRequest), 2) JSON.parse (the_loaded_data). К сожалению, без jQuery AJAX-запрос намного длиннее. Ответ в основном здесь: stackoverflow.com/questions/35294633/… Обойти эти две задачи невозможно.
-2

Вы можете разобрать объект в массиве следующим образом:

Object.values(YOUR_OBJECT)

документы: https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Object/values

  • 0
    Это на самом деле не даст того, что ищет OP. Если YOUR_OBJECT является содержимым файла, то вы просто получите массив с одной строкой, описывающей массив. Если это значение ключа groups , то это приведет к (по сути) бреду, так как вы получаете значения для всех ключей из строки.
  • 0
    О, я этого не заметил: S

Ещё вопросы

Сообщество Overcoder
Наверх
Меню