【Javascript】操作json 多層json物件,根據key獲取value;獲取json的所有的key
阿新 • • 發佈:2019-01-03
/**
* 根據key找value:當key都是唯一、不會重複的時候
* @param jsonData:json資料
* @param pathArr:路徑(帶父級),如:girlfriend.age
* @return {Array}
*/
function getValueByKey (data, field) {
for (let key in data) {
if (key === field) {
return data[key];
}
if (typeof(data[key]) === 'object' && data[key].length === undefined) {
return getValueByKey(data[key], textField);
}
}
}
var jsonObj = {
"中國": {
"北京": [
"朝陽"
],
"廣州": [
"天河"
]
},
"美國": {},
"英國": [
"愛爾蘭"
]
}
var result = getValueByKey(jsonObj, '廣州' );
console.log(result); //['天河']
/**
* 根據key的路徑找value
* @param jsonData:json資料
* @param pathArr:路徑(帶父級),如:girlfriend.age
* @return {Array}
*/
function getValueByKey(jsonData, pathArr) {
var values = [];
for (var idx in pathArr) {
var valueJson = {};
valueJson.path = pathArr[idx];
var keyArr = pathArr[idx].split(".");
var value = jsonData;
for (var i in keyArr) {
value = value[keyArr[i]];
}
valueJson.value = value;
values.push(valueJson);
}
return values;
}
var jsonData = {
name: 'simet',
age: 22,
girlfriend: {
name: 'betty',
age: 21,
}
};
var cc = getValueByKey(jsonData, ['girlfriend.age', 'age']);
console.log(cc);
/**
* 獲取json的所有key
* @param jsonObj:json值
* @param parentPath
* @return {Array}
*/
function getKeyAndPath(jsonObj, parentPath) {
var keyJsonArr = [];
var space = '';
if (parentPath != null) {
for (var i = 0; i < parentPath.split('.').length; i++) {
space = space + ' ';
}
}
for (var key in jsonObj) {
var path;
if (parentPath == null) {
path = key;
} else {
path = parentPath + '.' + key;
}
var keyJsonObj = {};
keyJsonObj.key = key;
keyJsonObj.newKey = space + key;
keyJsonObj.path = path;
keyJsonArr.push(keyJsonObj);
if (typeof (jsonObj[key]) == 'object' && jsonObj[key].length == undefined) {
keyJsonArr = keyJsonArr.concat(getKeyAndPath(jsonObj[key], path));
}
}
return keyJsonArr;
}
var aaaaa = getKeyAndPath(jsonData);
console.log(aaaaa);