【问题标题】:Split a Key Value Pair, Give Them New Keys拆分键值对,给他们新的键
【发布时间】:2016-03-31 14:00:12
【问题描述】:

目前,我的 JSON 如下所示:

var json = {"level" : [
                {"hs": 20},    //one
                {"no_hs": 30}  //two 
            ]};

我需要它看起来像这样:

var json = {"level" : [
               {"education" : "hs", "amount" : 20},   //one
               {"education" : "no_hs", "amount" : 30} //two
]};

如何拆分键值对,生成两个值,然后向它们添加键?

【问题讨论】:

    标签: javascript json split key


    【解决方案1】:

    您可以使用Object.keys() 获取密钥。

    var object = { "level": [{ "hs": 20 }, { "no_hs": 30 }] };
    
    object.level = object.level.map(function (a) {
        var o = {};
        Object.keys(a).forEach(function (k) {
            o.education = k;
            o.amount = a[k];
        });
        return o;
    });
    
    document.write('<pre>' + JSON.stringify(object, 0, 4) + '</pre>');

    【讨论】:

      【解决方案2】:

      您可以使用Object.keys(obj) 返回给定对象的键数组。 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

      然后您使用[0] 访问第一个键,因为您的对象只有一个键值对。

      var json = {"level" : [
                      {"hs": 20},    //one
                      {"no_hs": 30}  //two 
                  ]};
      
      var ret = [];
      
      json.level.forEach(function (item) {
        var key = Object.keys(item)[0];
          ret.push({
            education: Object.keys(item)[0],
            amount: item[key]
           });
        });
      
      json.level = ret;
      
      document.write('<pre>'+JSON.stringify(json, 0, 4) + '</pre>');
        

      【讨论】:

        【解决方案3】:

        更简单的方法... 用 1 个地图功能解决... 对于 level 数组中的每个元素,获取对象的第一个 key 并返回新元素。

        var json = {"level" : [
                    {"hs": 20},    //one
                    {"no_hs": 30}  //two 
                ]};
        
        json.level = json.level.map(function(val) {
            var key = Object.keys(val)[0];
                return {
                    education: key,
                    amount: val[key]
                };
            });
        

        【讨论】:

        • 虽然此答案可能是正确且有用的,但如果您 include some explanation along with it 解释它如何帮助解决问题,则最好。如果有变化(可能不相关)导致它停止工作并且用户需要了解它曾经是如何工作的,这在未来变得特别有用。谢谢!
        猜你喜欢
        • 1970-01-01
        • 2021-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多