Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 使用一组值解析JSON_Jquery - Fatal编程技术网

Jquery 使用一组值解析JSON

Jquery 使用一组值解析JSON,jquery,Jquery,我正在解析JSON 我得到了以下JSON(也描述了路径) 我得到了一个路径数组,如图所示 var patharray=[“冰淇淋”、“棍棒”、“冰霜”] 如何使用patharray中提到的上述路径动态搜索上述JSON 因此,上述PathArray的响应将是 { "leaf": [ { "id": "60", "has_topping": "1", "price": "75",

我正在解析JSON

我得到了以下JSON(也描述了路径)

我得到了一个路径数组,如图所示

var patharray=[“冰淇淋”、“棍棒”、“冰霜”]

如何使用patharray中提到的上述路径动态搜索上述JSON

因此,上述PathArray的响应将是

 {
    "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"