【问题标题】:JSON - Select2 data formatJSON - Select2 数据格式
【发布时间】:2021-03-26 11:14:16
【问题描述】:

我有这个 JSON 响应

{"items":[

    {"id":1,"parent_id":0,"name":"Root Catalog"},

       {"id":2,"parent_id":1,"name":"Category1"},

          {"id":5,"parent_id":2,"name":"Sub1_category1"},
          {"id":6,"parent_id":2,"name":"Sub2_category1"},

       {"id":3,"parent_id":1,"name":"Category2"},

          {"id":14,"parent_id":3,"name":"Sub1_category2"},
          {"id":15,"parent_id":3,"name":"Sub2_category2"},
    ]
}

为了使其与Select2 一起使用,我需要将数据格式化如下所示:

[
    {"id": 2,"text": "Category1",
    "children":  
       [
       {"id": 5, "text": "Sub1_category1"}, 
       {"id": 6, "text": "Sub2_category1"} 
       
       ]
    },
        {"id": 3,"text": "Category2",
        "children": 
       [
       {"id": 14,"text": "Sub1_category2",}, 
       {"id": 15,"text": "Sub2_category2"}
       ]
    },
  ];

如何操作 json 值? 非常感谢您提供的任何帮助。

【问题讨论】:

  • 您可以分享您已经尝试过的努力吗?

标签: javascript jquery json jquery-select2


【解决方案1】:

这是我的看法:

let test = {"items":[

    {"id":1,"parent_id":0,"name":"Root Catalog"},

       {"id":2,"parent_id":1,"name":"Category1"},

          {"id":5,"parent_id":2,"name":"Sub1_category1"},
          {"id":6,"parent_id":2,"name":"Sub2_category1"},

       {"id":3,"parent_id":1,"name":"Category2"},

          {"id":14,"parent_id":3,"name":"Sub1_category2"},
          {"id":15,"parent_id":3,"name":"Sub2_category2"},
    ]
}


function formatData(itemsList) {
    let formatOutput = [];
    for (item of itemsList.items) {
        if (item.parent_id > 0) {
            if (item.parent_id !== 1 && typeof formatOutput[item.parent_id] === 'undefined') {
                formatOutput[item.parent_id] = {
                    "id": item.parent_id,
                    "text": null,
                    "children": [
                        {id: item.id, text: item.name}
                    ]
                }
            } else if (item.parent_id !== 1) {
                formatOutput[item.parent_id].children.push({id: item.id, text: item.name})
            }
        }
    }
    for (item of itemsList.items) {
        if (typeof formatOutput[item.id] === 'object') {
            formatOutput[item.id].text = item.name
        }
    }
    return formatOutput.filter(val => val)
}

console.log(formatData(test))

【讨论】:

    【解决方案2】:

    你可以这样做,确保 Items 将是你的数组

    var items = data;
    var RequiredResult = [
      childern: []
    ];
    for (var i = 0; i < items.length; i++) {
    
      RequiredResult.push({
          "id": items[i].id,
          "text": items[i].text,
          childern.push({
            "id": items[i].id,
            "text": items[i].text
          })
        }
      )
    }
    console.log(RequiredResult);

    输出

        [
            {"id": 2,"text": "Category1",
            "children":  
               [
               {"id": 5, "text": "Sub1_category1"}, 
               {"id": 6, "text": "Sub2_category1"} 
               
               ]
            },
                {"id": 3,"text": "Category2",
                "children": 
               [
               {"id": 14,"text": "Sub1_category2",}, 
               {"id": 15,"text": "Sub2_category2"}
               ]
            },
          ];
    

    【讨论】:

    • 嗨,我已经将预期结果与 sn-p 分开(并单击了友好的“整洁”按钮)。但是,由于[ children: [] ] 无效,sn-p 仍然无法运行。请更新 sn-p。
    猜你喜欢
    • 1970-01-01
    • 2018-08-18
    • 1970-01-01
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-04
    • 2013-05-12
    相关资源
    最近更新 更多