parse [объект Object] угловой 6 - PullRequest
       9

parse [объект Object] угловой 6

0 голосов
/ 17 сентября 2018

Я хочу разобрать строку и сохранить projectName и poNumber в 2 переменных. Это то, что я имею сейчас, используя JSON.parse ()

employees = []
JSON.parse(data).array.forEach(element => {
    this.employees.push({
      projectName: element.projectName,
      poNumber: element.poNumber
    })
  });

console.log(employees['projectName'])
console.log(employees['poNumber'])

где data имеет этот формат:

{"id":1,"name": "john doe", "project":"[object Object]"}

и project выглядит так:

"project": [
     {
        "projectName": "proj1",
        "poNumber": "1"
     }
]

Но я получаю эту ошибку

ОШИБКА SyntaxError: Неожиданный токен o в JSON в позиции 1

Где я ошибаюсь? Спасибо за ваше время!

РЕДАКТИРОВАТЬ: я понял, почему я получаю эту ошибку, потому что мои данные уже являются объектом и нет необходимости использовать JSON.parse(), но мой код все еще не работает, потому что я получаю ошибку:

core.js: 1671 ОШИБКА TypeError: Невозможно прочитать свойство 'forEach' из не определен

Ответы [ 5 ]

0 голосов
/ 18 сентября 2018

Проблема была в том, что я не правильно разобрался.Вот правильный фрагмент:

let p = JSON.parse(data.project);

  this.employees.push({
  projectName: p.projectName,
  poNumber: p.poNumber
})

Спасибо всем за помощь!Каждый ваш ответ был правильным.

0 голосов
/ 17 сентября 2018

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

Надеюсь, это будет полезно.

let data = {
	"id":1,"name":"john doe",
  "project":[
        {
		"projectName": "proj1",
		"poNumber": "1"
	},
        {
		"projectName": "proj2",
		"poNumber": "2"
	}
    ]
};

let employees = [];


Object.keys(data).map(key => {
    if(key === 'project') {
        // Method 1
        // ===========================
        data[key].map(obj => {
            employees.push(obj);
        });
        
        // Method 2 : Shorter method
        // ===========================
        employees.push(...data[key]);
    }
});

console.log('Employees :', employees);

Спасибо, Джинеш Равал

0 голосов
/ 17 сентября 2018

Попробуй так:

JSON.parse(data).array.forEach(element => {
  this.employees.push({
    projectName: element.project.projectName,
    poNumber: element.project.poNumber
  })
})
0 голосов
/ 17 сентября 2018
JSON.parse(data).array.forEach(element => {
     this.employees.push({
        projectName: element.project.projectName,
        poNumber: element.project.poNumber
     })
});
0 голосов
/ 17 сентября 2018

Ваша строка Json недопустима и не приведена в строковое значение JSON.stringify (); вместо этого она была преобразована в строку с помощью метода toString, в противном случае вложенные объекты были правильно структурированы.

enter image description here

...