【问题标题】:How to change the structure of JSON如何改变 JSON 的结构
【发布时间】:2017-03-30 10:25:47
【问题描述】:

我有一个这样的 JSON

{"a":1,"b":2,"c":3}

我怎样才能像这样转换它的结构

[{
"option_id": "a",
"option_value": "1"
},
{
"option_id": "b",
"option_value": "2"
},
{
"option_id": "c",
"option_value": "3"
}]

我尝试了JSON.stringifyresult.push([i,data[i]]) 等,但到目前为止没有成功

【问题讨论】:

标签: javascript html angularjs arrays json


【解决方案1】:

你必须使用map函数,它接受一个回调函数。

另外,您应该使用Object.keys() 方法来获取对象的keys

var object={"a":1,"b":2,"c":3}
console.log(Object.keys(object).map(function(item){
    return {"option_id": item,"option_value":object[item]};
}));

【讨论】:

    【解决方案2】:

    使用Array#reduce

    var json = {"a":1,"b":2,"c":3},
        result = Object.keys(json).reduce(function(s,a){
          s.push({ "option_id": a, "option_value": json[a] });
          return s;
        }, []);
        
        console.log(result);

    【讨论】:

    • reduce vs map。地图获胜。
    • @Kinduser,有时 MAP 获胜,有时 REDUCE 获胜。我创建了一个game 来测试性能。请看这里:jsfiddle.net/b2c47cj1/1。也许你可以改进算法,
    • @Alexandru-IonutMihai 是的,地图获胜。每次尝试都像 10-7 的地图。
    • @Kinduser,顺便说一句:+1 为您的回答。
    • @Alexandru-IonutMihai 你更好,+1
    【解决方案3】:

    如果您使用的是 ECMAScript 5.1 或更新版本(或合适的 polyfill),那么以下内容将满足您的要求

    let value = {"a":1,"b":2,"c":3};
    let newValue = Object.keys(value).map(key => ({option_id:key,option_value:a[value]}));
    

    【讨论】:

      【解决方案4】:
      //with old syntax   
      q = {"a":1,"b":2,"c":3}
      arr = []
      for(i in q) {
        arr.push({'object_id': i, 'object_value': q[i] });
      }
      

      【讨论】:

        【解决方案5】:
        var object = {"a":1, "b":2, "c":3}, resultArr = [];
        
        for(var key in object) {
        resultArr.push({
        "option_id": key,
        "option_value": object[key]
        });
        }
        
        console.log(resultArr);
        
        var outputArr = Object.keys(object).map(function(eachItem){
        return {
        "option_id": eachItem,
        "option_value": object[eachItem]
        };
        });
        
        console.log(outputArr);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-18
          • 2020-09-02
          • 2019-01-13
          • 2016-11-28
          • 1970-01-01
          相关资源
          最近更新 更多