我正在从静态API返回JSON
getUsers() {
return this.http.get('https://myAPI.net/api/TAFGetAllUsers/0')
}
被称为
users: object;
ngOnInit() {
this.data.getUsers().subscribe(data => {
this.users = data
console.log(this.users)
})
}
但是,控制台输出是纯JSON文本:
{ "Users": [
{
"UserId": "4B4D1C12-48FD-4C1D-91F7-03C18FEC8B86",
"UserTypeId": 1,
"Name": "Tommy",
"EmailAddress": "email1@pie.co.uk",
"DateCreated": "2019-03-22T09:28:04.553"
},
{
"UserId": "232D7596-3DD8-40A1-B4B0-15A54A6A102A",
"UserTypeId": 3,
"Name": "Alexis",
"CompanyName": "Sony",
"EmailAddress": "ds3@sony.com",
"DateCreated": "2019-03-20T11:53:53.360"
},
{
"UserId": "1BB22695-1B4D-4E42-8A95-16D1E9B1EF59",
"UserTypeId": 3,
"Name": "Richard",
"CompanyName": "Microsoft",
"EmailAddress": "email2@bob.com",
"DateCreated": "2019-03-20T13:57:22.183"
} ] }
它不被视为对象。如果我这样做
data[0]
它只返回'['
如果我也这样做
data.Users
它返回“未定义”。
我无法直接做
JSON.parse(data)
由于将数据视为对象,因此出现错误“无法将类型为'Object'的参数分配给类型为'string'的参数”
我尝试将数据对象转换为字符串,然后解析为JSON
this.rawUsers = JSON.stringify(data);
this.users = JSON.parse(this.rawUsers);
但这将输出与默认数据值相同的内容,就像字符串一样。
答案 0 :(得分:2)
您具有以下对象结构:
{ "Users": [ ] }
所以您应该这样写才能获得用户数组:
this.data.getUsers().subscribe(data => {
if (data && data.Users) {
this.users = data.Users;
console.log(this.users);
} else {
console.log(data);
}
})
更新:
此行代码将引发错误this.rawUsers = JSON.stringify(data);
因为您的数据已经是json对象。因为
JSON是默认设置,不再需要显式解析
答案 1 :(得分:1)
我无法直接执行
JSON.parse(data)
,因为它将数据视为对象,给出了错误“无法将'Object'类型的参数分配给'string'类型的参数”
可以通过类型断言来解决:
JSON.parse(data as string)
如果该 still 引发错误,
JSON.parse(data as any as string)
(不是最优雅的解决方法,但应该可以)。
答案 2 :(得分:0)
答案 3 :(得分:-1)
您可以像下面这样使用:
JSON.parse(JSON.stringify(data));
希望这会对您有所帮助。