使用数组更改 JSON 的键名
Posted
技术标签:
【中文标题】使用数组更改 JSON 的键名【英文标题】:change key names of JSON using array [duplicate] 【发布时间】: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。
【参考方案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
关键字来删除属性。您可以简单地将新属性设置为旧属性的值,然后删除旧属性。
【讨论】:
以上是关于使用数组更改 JSON 的键名的主要内容,如果未能解决你的问题,请参考以下文章