【问题标题】:change key names of JSON using array [duplicate]使用数组更改 JSON 的键名
【发布时间】:2017-05-14 08:29:53
【问题描述】:

假设我有一些这样的 JSON 数据:

blah = [
{"Species":"setosa","Sepal.Length":5.1,"Sepal.Width":3.5},{"Species":"setosa","Sepal.Length":4.9,"Sepal.Width":3}
]

在我的代码中,我不一定知道 JSON 的键名。因此,我可以像这样抓取键(我知道数组的所有元素的键都是相同的):

mynames = Object.keys(blah[0]); // gives this... ["Species", "Sepal.Length", "Sepal.Width"]

我可以将此处名为Species 的第一个键的名称更改为newthing,如下所示:

JSON.parse(JSON.stringify(blah).split('"Species":').join('"newthing":'));

但如果我不知道它被称为“物种”,但知道它是“我的名字”的第一个元素,我想我可以这样做:

JSON.parse(JSON.stringify(blah).split('mynames[0]:').join('"newthing":'));

JSON.parse(JSON.stringify(blah).split('"mynames[0]":').join('"newthing":'));

但两者都失败了。有没有办法简单地做到这一点?

【问题讨论】:

  • 试试split('"' + mynames[0] + '":')
  • @JaromandaX - 当然,谢谢。
  • 将结构化数据转换为字符串来执行此操作很愚蠢,尤其是在您不知道 JSON 中值的范围的情况下。怎么说键的文本也可能存在于值中?它可能会根据数据起作用,但我认为它很笨拙且脆弱。
  • 为什么不.replace(mynames[0], "newthing")
  • 仅供参考,这是一个对象数组,而不是 JSON。 JSON 是一种文本的、独立于语言的数据格式。你有 JavaScript。

标签: javascript json


【解决方案1】:

看来你想要的是

blah[0].newthing = blah[0][mynames[0]];
delete blah[0][mynames[0]];

但知道这是 'mynames' 的第一个元素,

请注意,键的顺序无法保证,因此它可能不适用于每个环境甚至多次运行。

【讨论】:

    【解决方案2】:

    How do I remove a property from a JavaScript object? 解释了如何使用delete 关键字来删除属性。您可以简单地将新属性设置为旧属性的值,然后删除旧属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-22
      • 1970-01-01
      • 2011-10-12
      • 1970-01-01
      • 2023-04-08
      相关资源
      最近更新 更多