Jquery 使用一组值解析JSON
我正在解析JSON 我得到了以下JSON(也描述了路径) 我得到了一个路径数组,如图所示 var patharray=[“冰淇淋”、“棍棒”、“冰霜”] 如何使用patharray中提到的上述路径动态搜索上述JSON 因此,上述PathArray的响应将是Jquery 使用一组值解析JSON,jquery,Jquery,我正在解析JSON 我得到了以下JSON(也描述了路径) 我得到了一个路径数组,如图所示 var patharray=[“冰淇淋”、“棍棒”、“冰霜”] 如何使用patharray中提到的上述路径动态搜索上述JSON 因此,上述PathArray的响应将是 { "leaf": [ { "id": "60", "has_topping": "1", "price": "75",
{
"leaf": [
{
"id": "60",
"has_topping": "1",
"price": "75",
"name": "Regular Stick, Frosty 70 Ml",
"image": "/JSON_images/icecream_cup_vanilla.jpg",
"Discount": 10,
"has_crust": "0"
}
]
}
我得到了一个通用的搜索函数(接受单个参数并重新返回值)
但问题是它无法识别路径,只返回第一个找到的路径
function isArray(what) {
return Object.prototype.toString.call(what) === '[object Array]';
}
function isObject(what) {
return Object.prototype.toString.call(what) === '[object Object]';
}
function addZeros(val)
{
val = ""+val;
return val.length === 1 ? "0"+val : val;
}
var results = [];
var cancel = false;
function recursiveSearch(name, json, startSaving, parentJson) {
if (cancel) return;
if (startSaving) {
if (parentJson["leaf"]) {
results.push("leaf");
results.push(parentJson["leaf"]);
cancel = true; //pushing leaf twice for somereason, work around with 'cancel'
return;
} else if (json["name"]) {
results.push(json["name"]);
return;
} else if (json["leaf"]) {
results.push(json["leaf"]);
cancel = true; //pushing leaf twice for somereason, work around with 'cancel'
return;
}
}
if (isArray(json)) {
for (var i = 0; i < json.length; i++) {
recursiveSearch(name, json[i], startSaving, json);
}
} else {
if (isObject(json)) {
for (key in json) {
if (key == "name") {
if (json[key] == name) {
startSaving = true;
}
} else if (key == name) {
startSaving = true;
}
recursiveSearch(name, json[key], startSaving, json);
}
}
}
}
function searchLeaf(name)
{
}
function search(name) {
results = [];
cancel = false;
recursiveSearch(name, jsondata);
return results;
}
函数isArray(什么){
返回Object.prototype.toString.call(what)='[objectarray]';
}
函数isObject(什么){
返回Object.prototype.toString.call(what)=='[Object]';
}
函数addZeros(val)
{
val=”“+val;
返回val.length==1?“0”+val:val;
}
var结果=[];
var cancel=false;
函数递归搜索(名称、json、StartSave、parentJson){
如果(取消)返回;
如果(开始保存){
if(parentJson[“叶”]){
结果:推(“叶”);
结果:push(parentJson[“leaf”]);
cancel=true;//出于某种原因推叶两次,使用“cancel”解决
返回;
}else if(json[“name”]){
push(json[“name”]);
返回;
}else if(json[“叶”]){
push(json[“leaf”]);
cancel=true;//出于某种原因推叶两次,使用“cancel”解决
返回;
}
}
if(isArray(json)){
for(var i=0;i
假设或我从问题中理解的内容-patharray中的元素位置取决于搜索路径
意思是-“冰淇淋”->“棒状”->“冰霜”
var-patharray=[“冰淇淋”、“棍子”、“冰霜”];
函数findElement(对象、路径数组、索引){
var-res='';
if(索引 对于(var i=0;iIt看起来没有任何JSON,您拥有的是一个javascript对象!嗨,Harpreet,您能告诉我如何测试它吗?我的意思是什么是k.item在这种情况下??您的完整对象是k,0是从pathArray开始搜索项的索引。在这种情况下,它将引用IceCream
function isArray(what) {
return Object.prototype.toString.call(what) === '[object Array]';
}
function isObject(what) {
return Object.prototype.toString.call(what) === '[object Object]';
}
function addZeros(val)
{
val = ""+val;
return val.length === 1 ? "0"+val : val;
}
var results = [];
var cancel = false;
function recursiveSearch(name, json, startSaving, parentJson) {
if (cancel) return;
if (startSaving) {
if (parentJson["leaf"]) {
results.push("leaf");
results.push(parentJson["leaf"]);
cancel = true; //pushing leaf twice for somereason, work around with 'cancel'
return;
} else if (json["name"]) {
results.push(json["name"]);
return;
} else if (json["leaf"]) {
results.push(json["leaf"]);
cancel = true; //pushing leaf twice for somereason, work around with 'cancel'
return;
}
}
if (isArray(json)) {
for (var i = 0; i < json.length; i++) {
recursiveSearch(name, json[i], startSaving, json);
}
} else {
if (isObject(json)) {
for (key in json) {
if (key == "name") {
if (json[key] == name) {
startSaving = true;
}
} else if (key == name) {
startSaving = true;
}
recursiveSearch(name, json[key], startSaving, json);
}
}
}
}
function searchLeaf(name)
{
}
function search(name) {
results = [];
cancel = false;
recursiveSearch(name, jsondata);
return results;
}
var patharray = ["Ice creams","Stick","Frosty"] ;
function findElement(obj, patharray, index) {
var res = '';
if(index < patharray.length) {
var searchStr = patharray[index];
index++;
for(each in obj) {
if(obj[each] instanceof Array) {
var found = false;
for(var i=0;i<obj[each].length;i++) {
if(obj[each][i].name == searchStr) {
res = obj[each][i];
if(index<patharray.length) {
console.log('search again')
res = findElement(obj[each][i], patharray, index);
}
found = true
break;
}
}
if(found) {
break;
}
}
}
return res
}
}
var patharray = ["Ice creams","Stick","Frosty"] ;
console.log(findElement(k.item, patharray, 0), 'found');
//output
Object {name: "Frosty", leaf: Array[1]}
leaf: Array[1]
0: Object
Discount: 10
has_crust: "0"
has_topping: "1"
id: "60"
image: "/JSON_images/icecream_cup_vanilla.jpg"
name: "Regular Stick, Frosty 70 Ml"
price: "75"
length: 1
name: "Frosty"