简体   繁体   English

如何从 Javascript 中的新对象获取 JSON 数据键和内部键

[英]How to Get JSON data keys and inner keys to from new object in Javascript

I have a JSON, from that I need to extract all the keys in the JSON.我有一个 JSON,从中我需要提取 JSON 中的所有键。 so far I extracted all keys, But I need to from multidimensional array with only key values.到目前为止,我提取了所有键,但我需要从只有键值的多维数组中提取。

 { "coord": { "lon": -0.13, "lat": 51.51 }, "weather": [ { "id": 300, "main": { "submain": "Drizzle" }, "description": "light intensity drizzle", "icon": "09d" } ] }

I need to construct mulit-dimensional array something like this...我需要构建这样的多维数组......

 ["coord",["lon","lat"],"weather",[["id","main","description",["small_descript","large_description"],"icon"]....]
code that I had used is... 我使用的代码是...

 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);

You can try this snippet (it's pretty self-explanatory)你可以试试这个片段(这是不言自明的)

 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));

You can use reduce with some recurently reading fields that are objects::您可以将 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);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM