清理一个充满具有1个属性的对象的JSON对象

时间:2017-03-01 00:26:40

标签: javascript json

我有一个JSON对象,其格式如下:

{
    "ATTR1": {
        "0":"Value1"
    },
    "ATTR2": {
        "0":"Value2"
    } //and so on
}

这种格式适用于许多属性。我正在寻找让JSON更像的方法:

{
    "ATTR1": "Value1",
    "ATTR2": "Value2" //and so on
} 

在Javascript中有一种简单的方法吗?我尝试过类似的东西:

for(var attr in obj) {
    if(obj.hasOwnProperty(attr)) {
        attr = attr[0];
    }
}

但这没有奏效。有什么想法吗?

5 个答案:

答案 0 :(得分:2)

对象的键使用reduce:

let foo = {
    "ATTR1": {
        "0":"Value1"
    },
    "ATTR2": {
        "0":"Value2"
    } //and so on
};

let res = Object.keys(foo).reduce((a,b) => {
	a[b] = foo[b]['0'];
  return a;
}, {});

console.log(res)

答案 1 :(得分:0)

你很亲密!

尝试这样的事情:

var obj = {
    "ATTR1": {
        "0":"Value1"
    },
    "ATTR2": {
        "0":"Value2"
    } //and so on
};
var obj2 = {};
for(var attr in obj) {
    if(obj.hasOwnProperty(attr)) {
        obj2[attr] = obj[attr][0];
    }
}


alert(JSON.stringify(obj2));

小提琴:https://jsfiddle.net/coLxfeum/

答案 2 :(得分:0)

如果你想改变原来的obj,你可以这样做:

for(var attr in obj) {
    if(obj.hasOwnProperty(attr)) {
        obj[attr] = obj[attr][0];
    }
}

答案 3 :(得分:0)

使用Object.keys(),IMO可以更轻松地迭代javascript对象。它在主流浏览器中得到支持......无论如何,你想迭代顶层对象,抓住它的所有“smallObject”值并展平它们。您可以根据需要进行严格检查(坚持使用“0”键等),但从根本上说,折叠的值是包含字符串值的单值对象似乎很重要吗?无论如何 - 这是你如何做到的:

var v1 = {
    "ATTR1": {
        "0": "Value1"
    },
    "ATTR2": {
        "0": "Value2"
    }
}

function flatten(obj) {
    Object.keys(obj).forEach( function(attr) {
        var smallObj = obj[attr];
        var keys = Object.keys(smallObj);
        if( keys.length === 1 && typeof smallObj[keys[0]] === 'string' ) {  // && keys[0] === "0" ?
            obj[attr] = smallObj[keys[0]];
        } // else throw Error(...) ?
    })
    return obj;
}

console.log(flatten(v1));

> { ATTR1: 'Value1', ATTR2: 'Value2' }

答案 4 :(得分:0)

试试这个:

var jsonObj = {
    "ATTR1": {
        "0":"Value1"
    },
    "ATTR2": {
        "0":"Value2"
    }
};

var newJson = {};
for(var i = 0;i<Object.keys(jsonObj).length;i++) {
  newJson[Object.keys(jsonObj)[i]] = jsonObj[Object.keys(jsonObj)[i]]["0"];
}

console.log(newJson);