jQuery遍历多层json数据,根据传入的Key,返回相应数据。
Test jsonData:
var jsonData = {
id:"1111",
"floorRoom":{
"id":"123",
floorCode:"你好",
store:{
"id":"store",
name:"测试店铺",
demoData:{
"id":"321",
"name":"测试"
}
}
}
};
代码:
/**
* jQuery遍历多层json数据,根据传入的Key,返回相应数据。
* @param jsonData 数据源
* @param name 上层keyName。
* @param primaryKey 需要返回数据的键名
* @returns 返回相应数据
* */
function getJsonByPK(jsonData, name , primaryKey) {
for(key in jsonData) {
//拼接 json数据中的key
var k ;
if (isEmpty(name)){
k = key;
}else {
k = name + "." + key;
}
var tempKey = getNowJsonKeyStr(primaryKey , k);
if (tempKey == k){
if(!(jsonData[key] instanceof Object)){
//todo:测试打印所有 键值
// console.log(k + " = " + jsonData[key]); //如果不是Object则打印键值
if (k.toUpperCase() == primaryKey.toUpperCase()){
// console.log("打印主键数据 = " + k + " = " + jsonData[key]); //如果不是Object则打印键值
return jsonData[key];
}
}else{
return getJsonByPK(jsonData[key], k , primaryKey); //如果是Object则递归
}
}
}
};
//拆分primaryKey 返回一个与nowKey长度一致的 临时key
function getNowJsonKeyStr(primaryKey , nowKey){
var tempKey = "";
var primaryKeys = primaryKey.split(".");
var ks = nowKey.split(".").length;
for (var i = 0 ; i < ks && ks <= primaryKeys.length; i ++){
if (isEmpty(tempKey)){
tempKey = tempKey + primaryKeys[i];
}else {
tempKey = tempKey + '.' + primaryKeys[i];
}
}
return tempKey;
};
/**
* 判空
* @param obj
* @returns {boolean}
*/
function isEmpty(obj) {
if(obj==null||obj==undefined||obj==""){
return true;
}
return false;
}
测试结果1: 有返回值的
//调用
$(function(){
var key = "floorRoom.store.name";
getJsonByPK(jsonData,"" , key);
});
//结果:console.log打印内容
id = 1111
floorRoom.id = 123
floorRoom.floorCode = 你好
floorRoom.store.id = store
floorRoom.store.name = 测试店铺
打印主键数据 = floorRoom.store.name = 测试店铺
测试结果2: 无返回值的
//调用
$(function(){
var key = "floorRoom.store.name111";
getJsonByPK(jsonData,"" , key);
});
//结果:console.log打印内容
id = 1111
floorRoom.id = 123
floorRoom.floorCode = 你好
floorRoom.store.id = store
floorRoom.store.name = 测试店铺
floorRoom.store.demoData.id = 321
floorRoom.store.demoData.name = 测试