Угловое восприятие JSON как строки, а не объекта - PullRequest
0 голосов
/ 25 сентября 2019

Я возвращаю JSON из restful API

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 

, он возвращает "undefined".

Я не могу напрямую сделать

 JSON.parse(data)

, поскольку он видит данные как объект, выдавая ошибку «Аргумент типа« Объект »не может быть присвоен параметру типа« строка »'"

Я попытался преобразовать объект данных в строку, а затем выполнить синтаксический анализ в JSON

 this.rawUsers = JSON.stringify(data);

 this.users = JSON.parse(this.rawUsers);

Но это выдает то же самое, что и значение данных по умолчанию, действующее как строка.

Ответы [ 4 ]

2 голосов
/ 25 сентября 2019

У вас есть следующая структура объекта:

{ "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 является предполагаемым значением по умолчанию и больше не нуждается в явном разборе

См. Разница между HTTP и HTTPClient в угловых значениях 4?

1 голос
/ 25 сентября 2019

Я не могу напрямую сделать JSON.parse(data), поскольку он видит данные как объект, выдавая ошибку «Аргумент типа« Объект »не может быть назначен параметру типа« строка »»

Это можно исправить с помощью утверждения типа:

JSON.parse(data as string)

и, если это все еще выдает ошибку,

JSON.parse(data as any as string)

(Не самый элегантныйОбходной путь, но должен работать).

0 голосов
/ 25 сентября 2019

используйте это:

this.users = data.Users;

Пример Stackbliz

0 голосов
/ 25 сентября 2019

Вы можете использовать, как показано ниже:

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

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...