Правильно десериализуйте массив json для отображения результатов в ng2-smart-table

Я использую ng2-smart-table и пытаюсь отобразить данные

Когда я создаю локальный массив таких объектов, как:

var data = [
  {
    id: 1,
    name: 'Leanne Graham',
    username: 'Bret',
    email: '[email protected]',
  },
  {
    id: 2,
    name: 'Ervin Howell',
    username: 'Antonette',
    email: '[email protected]',
  },
  {
    id: 3,
    name: 'Clementine Bauch',
    username: 'Samantha',
    email: '[email protected]',
  }
]

он работает, но когда я получаю результат json, например, из моего API, он не работает:

data = [
  0:{
    id: 1,
    name: 'Leanne Graham',
    username: 'Bret',
    email: '[email protected]',
  },
  1:{
    id: 2,
    name: 'Ervin Howell',
    username: 'Antonette',
    email: '[email protected]',
  },
  2:{
    id: 3,
    name: 'Clementine Bauch',
    username: 'Samantha',
    email: '[email protected]',
  }
]

Любые идеи?


person Denis Evseev    schedule 27.08.2018    source источник
comment
Добавьте сведения о своем API и немного кода, чтобы увидеть, как он не работает. Если возможно, также добавьте ссылку StackBlitz на образец.   -  person SiddAjmera    schedule 27.08.2018


Ответы (1)


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

Если вы все еще получаете этот ответ, вы можете создать функцию сопоставления, чтобы это работало. Вот как:

Предполагая, что вот какой ответ вы получаете от своего API:

data = {
  '0': {
    id: 1,
    name: 'Leanne Graham',
    username: 'Bret',
    email: '[email protected]',
  },
  '1': {
    id: 2,
    name: 'Ervin Howell',
    username: 'Antonette',
    email: '[email protected]',
  },
  '2': {
    id: 3,
    name: 'Clementine Bauch',
    username: 'Samantha',
    email: '[email protected]',
  }
}

Вы можете преобразовать его в данные нужного формата следующим образом:

let myData = [];
for(let index in data) {
  myData.push(data[index]);
}

ОБНОВЛЕНИЕ. Эти данные кажутся вам знакомыми. Вы используете JSONPlaceholder? Coz, если это так, вы можете взглянуть на этот Образец проекта StackBlitz, который я создал. Я также использую JSONPlaceholder API, чтобы получить список пользователей и показать его в таблице материалов Angular. Этот пример должен помочь вам понять, как получить ответ от API.

person SiddAjmera    schedule 27.08.2018