Разобрать JSON с дубликатами ключей в JavaScript - PullRequest
0 голосов
/ 07 апреля 2020

Я работаю с Twitter API для трендов (см .: https://developer.twitter.com/en/docs/trends/trends-for-location/api-reference/get-trends-place).

API возвращает следующее JSON:

{
  trends: [
    {
      name: 'Boris',
      url: 'http://twitter.com/search?q=Boris',
      promoted_content: null,
      query: 'Boris',
      tweet_volume: 1083274
    },
    {
      name: '#COVID19',
      url: 'http://twitter.com/search?q=%23COVID19',
      promoted_content: null,
      query: '%23COVID19',
      tweet_volume: 2088454
    },
    {
      name: '#WorldHealthDay',
      url: 'http://twitter.com/search?q=%23WorldHealthDay',
      promoted_content: null,
      query: '%23WorldHealthDay',
      tweet_volume: 250817
    }
  ],
  as_of: '2020-04-07T14:06:49Z',
  created_at: '2020-04-07T14:03:32Z',
  locations: [ { name: 'London', woeid: 44418 } ]
}

Я хотел бы преобразовать это в массив Javascript, содержащий все значения, где ключом является имя; ie.:

arr=["Boris", "#COVID19", "WorldHealthDay"]

Как этого добиться? Из того, что я прочитал, собственные синтаксические анализаторы JavaScript JSON не могут обрабатывать дубликаты ключей.

Ответы [ 2 ]

2 голосов
/ 07 апреля 2020

ваши данные:

trends = [
    {
      name: 'Boris',
      url: 'http://twitter.com/search?q=Boris',
      promoted_content: null,
      query: 'Boris',
      tweet_volume: 1083274
    },
    {
      name: '#COVID19',
      url: 'http://twitter.com/search?q=%23COVID19',
      promoted_content: null,
      query: '%23COVID19',
      tweet_volume: 2088454
    },
    {
      name: '#WorldHealthDay',
      url: 'http://twitter.com/search?q=%23WorldHealthDay',
      promoted_content: null,
      query: '%23WorldHealthDay',
      tweet_volume: 250817
    }
  ];

затем используйте карту

var ans = trends.map(d => d.name)

результаты:

 ans = ["Boris", "#COVID19", "#WorldHealthDay"]
0 голосов
/ 07 апреля 2020

Массивы могут содержать дубликаты ЗНАЧЕНИЙ, что вы и просили. Массивы не содержат ключей, и эти строки в массиве также являются значениями ключа 'name' внутри JSON, возвращаемого из Twitter API.

Для решения вашей проблемы, например, с очень базовая c итерация и отсутствие Array.map

const data = JSON.parse(data_str);
const arr = [];
for (const trend of data.trends) {
    arr.push(trend.name);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...