我有一个JSON,我需要提取JSON中的所有键。到目前为止,我提取了所有键,但我需要从只有键值的多维数组。
{
"coord": {
"lon": -0.13,
"lat": 51.51
},
"weather": [
{
"id": 300,
"main": {
"submain": "Drizzle"
},
"description": "light intensity drizzle",
"icon": "09d"
}
]
}
我需要构建像这样的多维数组......
["coord",["lon","lat"],"weather",[["id","main","description",["small_descript","large_description"],"icon"]....]
var keyValue1= [];
function keyList(obj)
{
Object.keys(obj).forEach(function(key) {
keyValue1.push(key);
if(typeof(obj[key]) == 'object')
{
keyList(obj[key]);
}
});
}
var obj = {"coord":{"lon":-0.13,"lat":51.51},"weather":[{"id":300,"main":"Drizzle","description":{"small_descript":"light intensity drizzle","large_descript":"light intensity drizzle"},"icon":"09d"}],"base":"stations","main":{"temp":280.32,"pressure":1012,"humidity":81,"temp_min":279.15,"temp_max":281.15},"visibility":10000,"wind":{"speed":4.1,"deg":80},"clouds":{"all":90},"dt":1485789600,"sys":{"type":1,"id":5091,"message":0.0103,"country":"GB","sunrise":1485762037,"sunset":1485794875},"id":2643743,"name":"London","cod":200};
keyList(obj);
console.log(keyValue1);
答案 0 :(得分:0)
你可以尝试这个片段(它非常明显)
let getKeyList = obj => Object.keys(obj).reduce((s, key) => {
if (Array.isArray(obj[key])) {
// if it's an array then reduce all it's values (keys) into an array of arrays...
s.push(obj[key].reduce((acc, sub) => {
acc.push(getKeyList(sub));
return acc;
}, []))
} else {
// if it's an object then recurse...
if (typeof(obj[key]) === "object")
s.push(getKeyList(obj[key]))
}
// always push the key
s.push(key)
return s;
}, [ /* store */ ]);
// the JSON data
var x = {"coord":{"lon":-0.13,"lat":51.51},"weather":[{"id":300,"main":"Drizzle","description":{"small_descript":"light intensity drizzle","large_descript":"light intensity drizzle"},"icon":"09d"}],"base":"stations","main":{"temp":280.32,"pressure":1012,"humidity":81,"temp_min":279.15,"temp_max":281.15},"visibility":10000,"wind":{"speed":4.1,"deg":80},"clouds":{"all":90},"dt":1485789600,"sys":{"type":1,"id":5091,"message":0.0103,"country":"GB","sunrise":1485762037,"sunset":1485794875},"id":2643743,"name":"London","cod":200};
// then call it as
console.log(getKeyList(x));
答案 1 :(得分:0)
您可以使用reduce来复制某些对象::
function keyList(obj) {
return Object.keys(obj).reduce(function(arr, key) {
arr.push(key);
if(typeof(obj[key]) === 'object') {
arr.push(keyList(obj[key]));
}
return arr;
}, []);
}
var obj = {
"coord": {
"lon": -0.13,
"lat": 51.51
},
"weather": [
{
"id": 300,
"main": "Drizzle",
"description": {
"small_descript": "light intensity drizzle",
"large_descript": "light intensity drizzle"
},
"icon": "09d"
}
],
"base": "stations",
"main": {
"temp": 280.32,
"pressure": 1012,
"humidity": 81,
"temp": {
"min": 279.15,
"max": 281.15
}
},
"visibility": 10000,
"wind": {
"speed": 4.1,
"deg": 80
},
"clouds": {
"all": 90
},
"dt": 1485789600,
"sys": {
"type": 1,
"id": 5091,
"message": 0.0103,
"country": "GB",
"sunrise": 1485762037,
"sunset": 1485794875
},
"id": 2643743,
"name": "London",
"cod": 200
}
var keyValue1 = keyList(obj);
console.log(keyValue1);