如何从Javascript

时间:2017-10-04 05:40:07

标签: javascript jquery json

我有一个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);

2 个答案:

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