Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.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
Javascript 使用JQuery中的字符串在JSON对象中查找键值_Javascript_Jquery_Json - Fatal编程技术网

Javascript 使用JQuery中的字符串在JSON对象中查找键值

Javascript 使用JQuery中的字符串在JSON对象中查找键值,javascript,jquery,json,Javascript,Jquery,Json,JSON对象,如下所示。需要根据用户输入查找值。输入将类似于“data.location.type”,或“data.location.items[1].address.street”。可以在JQuery中完成吗 { "data": { "location": { "type": "List", "count": 1, "items": [ {

JSON对象,如下所示。需要根据用户输入查找值。输入将类似于
“data.location.type”
,或
“data.location.items[1].address.street”
。可以在JQuery中完成吗

{
    "data": {
        "location": {
            "type": "List",
            "count": 1,
            "items": [
                {
                    "id": 1,
                    "type": "S",
                    "address": {
                        "street": "123 Main St",
                        "city": "New York",
                        "state": "NY"
                    }
                },
                {
                    "id": 2,
                    "type": "S",
                    "address": {
                        "street": "1323 South St",
                        "city": "New York",
                        "state": "NY"
                    }
                }
            ]
        }
    }
}

首先,您需要将其解析为一个对象,然后使用一个如下所示的对象查找函数(这里有一些函数正在运行):

//https://gist.github.com/megawac/6162481#file-下划线查找js
变量查找=功能(对象,键){
变量类型=键的类型;
如果(type='string'| | type==“number”)键=(“”+键)。替换(/\[(.*)\])/,函数(m,键){//处理可能出现[1]的情况
返回“.”+键;
}).split('.');
对于(变量i=0,l=key.length,currentkey;i“列表”
查找(数据,“数据.位置.项目[1].地址.街道”)/=>“南大街1323号”

首先,您需要将其解析为一个对象,然后使用如下所示的对象查找函数(这里有一个函数):

//https://gist.github.com/megawac/6162481#file-下划线查找js
变量查找=功能(对象,键){
变量类型=键的类型;
如果(type='string'| | type==“number”)键=(“”+键)。替换(/\[(.*)\])/,函数(m,键){//处理可能出现[1]的情况
返回“.”+键;
}).split('.');
对于(变量i=0,l=key.length,currentkey;i“列表”
查找(数据,“数据.位置.项目[1].地址.街道”)/=>“南大街1323号”

首先,您需要将其解析为一个对象,然后使用如下所示的对象查找函数(这里有一个函数):

//https://gist.github.com/megawac/6162481#file-下划线查找js
变量查找=功能(对象,键){
变量类型=键的类型;
如果(type='string'| | type==“number”)键=(“”+键)。替换(/\[(.*)\])/,函数(m,键){//处理可能出现[1]的情况
返回“.”+键;
}).split('.');
对于(变量i=0,l=key.length,currentkey;i“列表”
查找(数据,“数据.位置.项目[1].地址.街道”)/=>“南大街1323号”

首先,您需要将其解析为一个对象,然后使用如下所示的对象查找函数(这里有一个函数):

//https://gist.github.com/megawac/6162481#file-下划线查找js
变量查找=功能(对象,键){
变量类型=键的类型;
如果(type='string'| | type==“number”)键=(“”+键)。替换(/\[(.*)\])/,函数(m,键){//处理可能出现[1]的情况
返回“.”+键;
}).split('.');
对于(变量i=0,l=key.length,currentkey;i“列表”
查找(数据,“数据.位置.项目[1].地址.街道”)/=>“南大街1323号”

这只是拼凑起来的,但它应该适合您

var input=“data.location.type”;
//var input=“data.location.items[1].address.street”;
var parts=input.split('.');
var-prev;
对于(变量i=0;i
这只是拼凑起来的,但它应该适合您

var input=“data.location.type”;
//var input=“data.location.items[1].address.street”;
var parts=input.split('.');
var-prev;
对于(变量i=0;i
这只是拼凑起来的,但它应该适合您

var input=“data.location.type”;
//var input=“data.location.items[1].address.street”;
var parts=input.split('.');
var-prev;
对于(变量i=0;i
这只是拼凑起来的,但它应该适合您

var输入
//https://gist.github.com/megawac/6162481#file-underscore-lookup-js
var lookup = function(obj, key) {
    var type = typeof key;
    if (type == 'string' || type == "number") key = ("" + key).replace(/\[(.*?)\]/, function(m, key){//handle case where [1] may occur
        return '.' + key;
    }).split('.');
    for (var i = 0, l = key.length, currentkey; i < l; i++) {
        if (obj.hasOwnProperty(key[i])) obj = obj[key[i]];
        else return undefined;
    }
    return obj;
}

//syntax: lookup(jsonobj, input);
//Tests using your data
lookup(data, "data.location.type") //=> "List"
lookup(data, "data.location.items[1].address.street") //=> ""1323 South St"
var input = "data.location.type";
//var input = "data.location.items[1].address.street";
var parts = input.split('.');

var prev;
for(var i = 0; i < parts.length; i++){
    var index;
    if(parts[i].indexOf('[') != -1){
        var key = parts[i].substr(0, parts[i].indexOf('['));
        index = parseInt(parts[i].substr(parts[i].indexOf('[') + 1, 1), 10);
        if(!prev){
            prev = test[key][index];
        } else {
            prev = prev[key][index];
        }
    } else { 
        if(!prev){
            prev = test[parts[i]];
        } else {
            prev = prev[parts[i]];
        }

        if(i === parts.length - 1){
            alert(prev);
        }
    }
}