【问题标题】:Parse JSON with duplicate keys in JavaScript用 JavaScript 中的重复键解析 JSON
【发布时间】:2020-07-19 19:07:17
【问题描述】:

我正在使用 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 数组,其中包含键为名称的所有值;即:

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

我怎样才能做到这一点?根据我的阅读,原生 JavaScript JSON 解析器无法处理重复键。

【问题讨论】:

  • Array.prototype.map()
  • arr = data.trends.map(t => t.name) -> ["Boris", "#COVID19", "#WorldHealthDay"]

标签: javascript node.js json twitter


【解决方案1】:

您的数据:

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"]

【讨论】:

【解决方案2】:

数组可以包含重复的 VALUES,这是您所要求的。数组不包含键,数组中的这些字符串也是 twitter API 返回的 JSON 中的“name”键的值。

为了解决您的问题,例如,使用非常基本的迭代并且没有 Array.map

const data = JSON.parse(data_str);
const arr = [];
for (const trend of data.trends) {
    arr.push(trend.name);
}

【讨论】:

  • 它与[].map 有何不同??
  • 不是,但它可以帮助此人更清楚地了解该过程的具体运作方式。
  • 是的,我知道数组不包含键 - 我试图解释我想从 JSON 中取出哪些数据。感谢您尝试使我变得简单-但我无法使您的代码正常工作,因此我将把以前的答案标记为答案。顺便说一句 - 你花哨的新 push() 方法完全让我震惊 - 早在 2001 年我真正以编写代码为生时,它就不存在了!
  • @NealO'Kelly Array.prototype.push 实际上早在 2000 年就出现在 IE 5.5 中:) developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…。 for-of 循​​环是 ES6,所以如果您在旧浏览器中运行它,我想它可能无法正常工作。
猜你喜欢
  • 2012-04-10
  • 2017-01-09
  • 1970-01-01
  • 1970-01-01
  • 2016-02-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-23
  • 2017-07-23
相关资源
最近更新 更多