更改Javascript中的JSON对象格式



我有以下JSON对象,它来自DB,格式如下:

{
"total_count": 4,
"items": [
{
"id": "906a1409-b66a-4f8f-b76b-36898828faf2",
"en": "Grade 1B",
"de": "xyz"
},
{
"id": "00ace4db-d29e-4cf4-b25c-f85369db345e",
"en": "Grade 1A",
"de": "xyz"
},
{
"id": "6b4a5578-4f27-4370-9320-a7f57a6c0f54",
"en": "Grade 2A",
"de": "xyz"
},
{
"id": "53b52ee8-dc2e-4c6b-8017-c913d334d5af",
"en": "Grade 2B",
"de": "xyz
}
]
}

但是我需要以下格式的它来使用我的UI:

{
"total_count": 4,
"items": [
{
"id": "906a1409-b66a-4f8f-b76b-36898828faf2",
"lang": {
"en": "Grade 1B",
"de": "xyz"
}
},
{
"id": "00ace4db-d29e-4cf4-b25c-f85369db345e",
"lang": {
"en": "Grade 1A",
"de": "xyz"
}
},
{
"id": "6b4a5578-4f27-4370-9320-a7f57a6c0f54",
"lang": {
"en": "Grade 2A",
"de": "xyz"
}
},
{
"id": "53b52ee8-dc2e-4c6b-8017-c913d334d5af",
"lang": {
"en": "Grade 2B"
"de": "xyz"
}
]
}

有没有一种简单的javascript方法来执行这种转换?也许是地图法?

我正在尝试这样的东西:

var rows_Original; // this comes from DB
var rows_Result= {}; // new json
rows_Result["total_count"] = rows_Original.length;
rows_Result['items']  = rows_Original;
rows_Result['items'].lang={};
for (var item in rows_Result['items']) {
item[i].lang.en  = item.en;
item[i].lang.de = 'item.de;
}

但我一直在了解像de,en这样的元素(不能设置未定义的属性'en'(

感谢并问候

您可以破坏id,并将其余属性获取到lang变量中。然后使用快捷属性名称创建一个具有嵌套lang属性的新对象

const input = {total_count:4,items:[{id:"906a1409-b66a-4f8f-b76b-36898828faf2",en:"Grade 1B",de:"xyz"},{id:"00ace4db-d29e-4cf4-b25c-f85369db345e",en:"Grade 1A",de:"xyz"},{id:"6b4a5578-4f27-4370-9320-a7f57a6c0f54",en:"Grade 2A",de:"xyz"},{id:"53b52ee8-dc2e-4c6b-8017-c913d334d5af",en:"Grade 2B",de:"xyz"}]};
const { total_count, items } = input;
const newItems = items.map(({ id, ...lang }) => ({ id, lang }) ),
output = { total_count, items: newItems };
console.log(output)

如果不支持析构函数和rest语法,您可以循环遍历每个项的键,如下所示:

var input = {total_count:4,items:[{id:"906a1409-b66a-4f8f-b76b-36898828faf2",en:"Grade 1B",de:"xyz"},{id:"00ace4db-d29e-4cf4-b25c-f85369db345e",en:"Grade 1A",de:"xyz"},{id:"6b4a5578-4f27-4370-9320-a7f57a6c0f54",en:"Grade 2A",de:"xyz"},{id:"53b52ee8-dc2e-4c6b-8017-c913d334d5af",en:"Grade 2B",de:"xyz"}]};
var output = {
total_count: input.total_count,
items: []
};
for (var item of input.items) {
var newItem = {};
for (var key in item) {
if (key === 'id')
newItem[key] = item[key]
else {
newItem.lang = newItem.lang || {};
newItem.lang[key] = item[key]
}
}

output.items.push(newItem)
}
console.log(output)

var input = {"total_count": 4,"items": [{"id": "906a1409-b66a-4f8f-b76b-36898828faf2","en": "Grade 1B","de": "xyz"},{"id": "00ace4db-d29e-4cf4-b25c-f85369db345e","en": "Grade 1A","de": "xyz"},{"id": "6b4a5578-4f27-4370-9320-a7f57a6c0f54","en": "Grade 2A","de": "xyz"},{"id": "53b52ee8-dc2e-4c6b-8017-c913d334d5af","en": "Grade 2B","de": "xyz"}]}
function output(inp){

var output = {"total_count" : "","items" : []}
output.total_count = inp.total_count;
var items = inp.items;

items.forEach(item => {
var obj = {"id" : "","lang" : {"en":"","de":""}};
obj.id = item.id;
obj.lang.en = item.en; 
obj.lang.de = item.de;
output.items.push(JSON.stringify(obj));
});
return output; 
}
console.log(output(input));

最新更新