角度将JSON视为字符串而不是对象

时间:2019-09-25 10:46:34

标签: json angular http

我正在从静态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);

但这将输出与默认数据值相同的内容,就像字符串一样。

4 个答案:

答案 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是默认设置,不再需要显式解析

请参见Difference between HTTP and HTTPClient in angular 4?

答案 1 :(得分:1)

  

我无法直接执行JSON.parse(data),因为它将数据视为对象,给出了错误“无法将'Object'类型的参数分配给'string'类型的参数”

可以通过类型断言来解决:

JSON.parse(data as string)

如果该 still 引发错误,

JSON.parse(data as any as string)

(不是最优雅的解决方法,但应该可以)。

答案 2 :(得分:0)

使用此功能:

this.users = data.Users;

Stackbliz Example

答案 3 :(得分:-1)

您可以像下面这样使用:

JSON.parse(JSON.stringify(data));

希望这会对您有所帮助。

相关问题