我有一个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];
}
}
但这没有奏效。有什么想法吗?
答案 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));
答案 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);