繁体   English   中英

将 JSON object 格式更改为 Javascript

[英]Change JSON object format in Javascript

我有以下 JSON object,它来自 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 方法来执行此转换? 也许 map 方法?

我正在尝试这样的事情:

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并将属性的rest获取到lang变量。 然后使用简写属性名称创建一个新的 object 和一个嵌套的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));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM