使用数组更改 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 的键名的主要内容,如果未能解决你的问题,请参考以下文章

在 Spring Boot 中自定义 JSON 响应以更改键名

PHP 根据配置转换数组中的键名 方便给前端的时候改键名

使用 jq 保留键名展平 JSON

JSON类使用说明

JSON对象的编组切片的键名需要小写[重复]

如何“过滤”JSON 以获得唯一的键名/值对?