我有一些结构化的JSON数据,如下所示。假设可以通过JSON.parse()
进行交换:
[
{
"title": "pineapple",
"uid": "ab982d34c98f"
},
{
"title": "carrots",
"uid": "6f12e6ba45ec"
}
]
我需要它看起来像这样,将title
重新映射为name
,将uid
重新映射为id
,并产生以下结果:
[
{
"name": "pineapple",
"id": "ab982d34c98f"
},
{
"name": "carrots",
"id": "6f12e6ba45ec"
}
]
最直观的方法是这样的:
str = '[{"title": "pineapple","uid": "ab982d34c98f"},{"title": "carrots", "uid": "6f12e6ba45ec"}]';
var arr = JSON.parse(str);
for (var i = 0; i<arr.length; i++) {
arr[i].name = arr[i].title;
arr[i].id = arr[i].uid;
delete arr[i].title;
delete arr[i].uid;
}
str = '[{"title": "pineapple","uid": "ab982d34c98f"},{"title": "carrots", "uid": "6f12e6ba45ec"}]';
var arr = JSON.parse(str);
for (var i = 0; i<arr.length; i++) {
arr[i].name = arr[i].title;
arr[i].id = arr[i].uid;
delete arr[i].title;
delete arr[i].uid;
}
$('body').append("<pre>"+JSON.stringify(arr, undefined, 4)+"</pre>");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
...或者使用更复杂的方法 (尽管不一定更高效),比如这个。
这一切看起来都很好,但如果数组中有200,000个对象怎么办? 这会导致很多处理开销。
有没有更高效的方法来重新映射键名? 可能无需循环遍历整个对象数组? 如果您的方法更高效,请提供证明/参考资料。
{from, to}
对组成的数组,然后使用map
函数遍历arr
。 - lexasssstr = str.replace(/"title":/g, '"name":');
。当然,这种方法对对象可能具有的值进行了一定的假设,但它很容易实现,为什么不试试呢? - Felix Kling