Как парсить массив с объектами из файла

193
08 октября 2018, 20:20

есть файл, в котором лежит массив из объектов. Необходимо его обработать так, чтобы массив передался в переменную. Обращаюсь к файлу таким способом:

constructor(){
    super(...arguments);
    this.state ={
        cards:[]
    }
}
componentDidMount(){
    fetch(API_URL+'/cards', {headers:API_HEADERS})
        .then((response)=>response.text())
        .then((responseData) => this.setState({cards:responseData}))
        .catch((err)=>console.log('ERR',err));
}
...

в итоге получается просто строка с содержимым этого файла. файл выглядит так:

[{
    id: 1,
    title: 'card1',
    status: 'in-progress',
    description: 'desk1',
    tasks:[{id:1,name:'task1 for card1',done: true},
            {id:2,name:'task2 for card1',done: false},
            {id:3,name:'task3 for card1',done: false}]
  },{
    id: 2,
    title: 'card2',
    status: 'todo',
    description: 'desk2',
    tasks:[]
  }]

Как правильно передавать содержимое файла в переменную?

Answer 1

У вас возвращается текст, который похож на js объект. Но в данном случае, превратить его в настоящий js объект вы сможете только с помощью eval, что плохо.

Выход один - в файле должен содержаться JSON, что бы его создать, вам нужно заменить все одинарные скобки на двойные + все ключи обернуть двойными скобками

[
  {
    "id": 1, // числа можно не оборачивать
    "title": "card1",
    "status": "in-progress",
    // ...
    "tasks": [{
      "id": 1,
      "name": "task1 for card1",
      "done": true // boolean тоже не нужно оборачивать
    }]
  },
  // ...
]

Если сделаете это, то сможете легко получать объект из JSON:

// заменив
.then((response)=>response.text())
// на
.then((response)=>response.json())

Здесь можно побаловаться online

Answer 2

Я не знаток react и серверных javascript технологий, но, все же позволю заметить, с высоты знания ES5.

Исхожу из того, что у нас на руках уже есть строковое содержимое файла в переменной data.

На мой взгляд, правильным было бы использовать функцию JSON.parse(data), но содержимое вашего файла не является валидным JSON кодом. Преобразуйте файл в правильный JSON, воспользуйтесь JSON.parse(data) и проблема будет решена. Вот здесь коротко и ясно написано про JSON https://learn.javascript.ru/json.

Если же у вас отсутствует возможность привести файл к надлежащему виду, возможно использование функции eval(data), т.к. ваш файл является валидным JavaScript кодом. Но это решение порекомендовать не могу, т.к. использование eval() вызывает у меня легкий приступ паранойи.

READ ALSO
Получить нужные результат из строки или number

Получить нужные результат из строки или number

Есть к примеру числа 13121313176781 и 1537275В первом числе нужно получить 6 и 81 так как разделитель 7, а во втором числе нужно получить 2 и 5

193
Удаление из строки всех символов кроме цифр и символа +

Удаление из строки всех символов кроме цифр и символа +

Как написать регулярное выражение, которое убирает все символы кроме цифр и символа +?

181
Виснет БД при любом сохранении

Виснет БД при любом сохранении

Есть сайт на magento 19, более 500к товаров

164
Куда пропал Notifier?

Куда пропал Notifier?

Всем привет ребят, сейчас ставил Custom MySQL и полгода назад делал тоже самое и был Notifier ( Маленький тулс, который управляет сервером, включает,...

196