JSON Ошибка разбора: неожиданный идентификатор "undefined" при попытке разобрать объект из массива (React-Native) - PullRequest
0 голосов
/ 24 февраля 2020

Я создал способ хранения данных так, как я хочу в AsyncStorage. Это включает в себя:

  1. Чтение различных входных данных (различных массивов)
  2. Хранение входных данных в локальном this.state.object, который содержит несколько массивов
  3. Stringifying this.state.object
  4. Хранение строкового объекта во временном массиве
  5. Присвоение массива со всеми объектами другому состоянию, this.state.allObjects
  6. Stringifying 'this.state.allObjects'
  7. Хранение строкового массива в AsyncStorage

Конечной целью всего этого является создание массива объектов, каждый из которых представляет очень разные экземпляры одного типа (с разными параметрами et c .). Возможно, это не самый элегантный подход, но, похоже, он отлично хранится и загружается.

Проблема возникает, когда я пытаюсь проанализировать что-либо из this.state.allObjects[x]. Или, скорее, это происходит только тогда, когда мне нужно получить к нему доступ в случае, который НЕ сразу после загрузки.

Во время моей функции loadFromAsync я вполне могу выполнить this.state.allObjects = JSON.parse(fromAsync);, чтобы получить массив строковых объектов и затем var display = JSON.parse(this.state.allObjects[0]).name для получения имени первого проанализированного объекта массива.

В любое время вне этой функции, когда я пытаюсь вызвать var display = JSON.parse(this.state.allObjects[0]).name или даже проще <Text>{JSON.parse(this.state.allObjects[0]).name}</Text>, я получаю следующие ошибки:

  • при запуске
const parse  = JSON.parse(this.state.allObjects[0]); 
//JSON Parse error: Unexpected identifier "undefined"
console.log(parse.name);
  • и при запуске
const parse  = JSON.parse(this.state.allObjects[0]).name; 
//JSON Parse error: Unexpected identifier "undefined" + null is not an object (evaluating 'JSON.parse(this.state.allObjects[0]).name
console.log(parse);
  • и, наконец, при работает
const parse  = JSON.parse(this.state.allObjects); 
//JSON Parse error: Unexpected EOF + JSON Parse error: Unexpected token ','

Я предполагаю, что this.state.allObjects изменяется где-то в моем коде или добавляет дополнительные } где-то, хотя это действительно не должно. Когда я отображаю this.state.object и this.state.allObjects[0], их формат визуально одинаков. Добавление большего числа объектов к this.state.allObjects и отображение каждого строкового компонента также работает; это просто вопрос фактического разбора этих компонентов, которые не работают за пределами исходной функции загрузки.

Я чрезвычайно застрял. Любой совет приветствуется. Если мне нужно изменить свой тип данных, это нормально. Немного раздражает, что мы зашли так далеко со строковым массивом строковых объектов, содержащих массивы, и не смогли разобрать его.

1 Ответ

0 голосов
/ 24 февраля 2020

Потому что this.state.allObjects Уже JSON объект.

Попробуйте JSON.stringify()

...