解析[object Object] Angular 6

时间:2018-09-17 12:42:53

标签: json angular jsonparser

我想解析一个字符串并将projectNamepoNumber保存到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"
     }
]

但是我得到这个错误

  

ERROR SyntaxError:JSON中位置1处的意外令牌o

我在哪里误会?谢谢您的时间!

编辑:我理解为什么会出现此错误,因为我的数据已经是一个对象并且不需要使用JSON.parse(),但是我的代码仍然无法正常工作,因为我得到了错误:

  

core.js:1671错误TypeError:无法读取的属性'forEach'   未定义

5 个答案:

答案 0 :(得分:3)

您的Json字符串无效且未通过JSON.stringify()进行字符串化,而是通过toString方法进行了字符串化,否则嵌套对象已正确进行了字符串化。

enter image description here

答案 1 :(得分:1)

尝试这样:

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

答案 2 :(得分:1)

我在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);

谢谢, 吉涅什·拉瓦尔(Jignesh Raval)

答案 3 :(得分:1)

问题是我没有解析正确的内容。这是正确的代码段:

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

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

谢谢大家的帮助!您的每个答案都是正确的。

答案 4 :(得分:0)

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