복붙노트

[JQUERY] jQuery로 JSON 트리를 검색하는 방법

JQUERY

jQuery로 JSON 트리를 검색하는 방법

해결법


  1. 1.

    var json = {
        "people": {
            "person": [{
                "name": "Peter",
                "age": 43,
                "sex": "male"},
            {
                "name": "Zara",
                "age": 65,
                "sex": "female"}]
        }
    };
    $.each(json.people.person, function(i, v) {
        if (v.name == "Peter") {
            alert(v.age);
            return;
        }
    });
    

    예.

    이 답변에 따라, 당신이 뭔가를 같이 사용할 수 있습니다 :

    $(function() {
        var json = {
            "people": {
                "person": [{
                    "name": "Peter",
                    "age": 43,
                    "sex": "male"},
                {
                    "name": "Zara",
                    "age": 65,
                    "sex": "female"}]
            }
        };
        $.each(json.people.person, function(i, v) {
            if (v.name.search(new RegExp(/peter/i)) != -1) {
                alert(v.age);
                return;
            }
        });
    });
    

    예 2


  2. 2.당신이 무엇을 당신에게있는 거 검색을 발견했습니다 어디 jQuery.each의 ifaour의 예 () 도움이 될 수 있지만, 지점에서 거짓을 반환하여 jQuery.each ()가 (즉이 중지) 분류 될 수 있음을 추가 할 수 발견 :

    당신이 무엇을 당신에게있는 거 검색을 발견했습니다 어디 jQuery.each의 ifaour의 예 () 도움이 될 수 있지만, 지점에서 거짓을 반환하여 jQuery.each ()가 (즉이 중지) 분류 될 수 있음을 추가 할 수 발견 :

    $.each(json.people.person, function(i, v) {
            if (v.name == "Peter") {
                // found it...
                alert(v.age);
                return false; // stops the loop
            }
    });
    

  3. 3.당신은 Jsel 사용할 수 있습니다 - https://github.com/dragonworx/jsel을 (전체 공개를 위해,이 라이브러리의 소유자).

    당신은 Jsel 사용할 수 있습니다 - https://github.com/dragonworx/jsel을 (전체 공개를 위해,이 라이브러리의 소유자).

    그것은 실제의 XPath 엔진을 사용하여 매우 사용자 정의 할 수 있습니다. 모두 Node.js를 브라우저에서 실행합니다.

    원래의 질문을 감안할 때, 당신과 함께 이름으로 사람을 찾을 것입니다 :

    // include or require jsel library (npm or browser)
    var dom = jsel({
        "people": {
            "person": [{
                "name": "Peter",
                "age": 43,
                "sex": "male"},
            {
                "name": "Zara",
                "age": 65,
                "sex": "female"}]
        }
    });
    var person = dom.select("//person/*[@name='Peter']");
    person.age === 43; // true
    

    당신은 항상 같은 JSON 스키마로 작업하는 경우에 당신은 jsel와 자신의 스키마를 작성하고, 같은 짧은 표현을 사용할 수 있었다 :

    dom.select("//person[@name='Peter']")
    

  4. 4.당신은 JSON은 자바 스크립트 객체에로드가되면, 그것은 더 이상 jQuery를 문제 없습니다하지만 지금은 자바 스크립트 문제입니다. 자바 스크립트에서는 예를 들어 검색을 같은 작성할 수 :

    당신은 JSON은 자바 스크립트 객체에로드가되면, 그것은 더 이상 jQuery를 문제 없습니다하지만 지금은 자바 스크립트 문제입니다. 자바 스크립트에서는 예를 들어 검색을 같은 작성할 수 :

    var people = myJson["people"];
    var persons = people["person"];
    for(var i=0; i < persons.length; ++i) {
        var person_i = persons[i];
        if(person_i["name"] == mySearchForName) {
            // found ! do something with 'person_i'.
            break;
        }
    }
    // not found !
    

  5. 5.이 같은 $ .grep ()를 사용하여 JSON 개체 배열에 검색 할 수 있습니다 :

    이 같은 $ .grep ()를 사용하여 JSON 개체 배열에 검색 할 수 있습니다 :

    var persons = {
        "person": [
            {
                "name": "Peter",
                "age": 43,
                "sex": "male"
            }, {
                "name": "Zara",
                "age": 65,
                "sex": "female"
            }
          ]
       }
    };
    var result = $.grep(persons.person, function(element, index) {
       return (element.name === 'Peter');
    });
    alert(result[0].age);
    

  6. 6.당신은 DefiantJS을 사용할 수 있습니다 (http://defiantjs.com) 방법에 전역 객체의 JSON을 확장하는 "검색". 이는 사용하면 JSON 구조에 XPath 쿼리를 조회 할 수 있습니다. 예:

    당신은 DefiantJS을 사용할 수 있습니다 (http://defiantjs.com) 방법에 전역 객체의 JSON을 확장하는 "검색". 이는 사용하면 JSON 구조에 XPath 쿼리를 조회 할 수 있습니다. 예:

    var byId = function(s) {return document.getElementById(s);},
    data = {
       "people": {
          "person": [
             {
                "name": "Peter",
                "age": 43,
                "sex": "male"
             },
             {
                "name": "Zara",
                "age": 65,
                "sex": "female"
             }
          ]
       }
    },
    res = JSON.search( data, '//person[name="Peter"]' );
    
    byId('name').innerHTML = res[0].name;
    byId('age').innerHTML = res[0].age;
    byId('sex').innerHTML = res[0].sex;
    

    다음은 작업 바이올린입니다; http://jsfiddle.net/hbi99/NhL7p/


  7. 7.그것은 당신을 도울 수있는 몇 가지 JS-라이브러리가 있습니다 :

    그것은 당신을 도울 수있는 몇 가지 JS-라이브러리가 있습니다 :

    또한 브라우저에서 작동하고 질의-메커니즘의 모든 종류가있는 JSON - 문서 저장소입니다 Lawnchair 한 번 봐 걸릴 수도 있습니다.


  8. 8.

        var GDNUtils = {};
    
    GDNUtils.loadJquery = function () {
        var checkjquery = window.jQuery && jQuery.fn && /^1\.[3-9]/.test(jQuery.fn.jquery);
        if (!checkjquery) {
    
            var theNewScript = document.createElement("script");
            theNewScript.type = "text/javascript";
            theNewScript.src = "http://code.jquery.com/jquery.min.js";
    
            document.getElementsByTagName("head")[0].appendChild(theNewScript);
    
            // jQuery MAY OR MAY NOT be loaded at this stage
    
    
        }
    };
    
    
    
    GDNUtils.searchJsonValue = function (jsonData, keytoSearch, valuetoSearch, keytoGet) {
        GDNUtils.loadJquery();
        alert('here' + jsonData.length.toString());
        GDNUtils.loadJquery();
    
        $.each(jsonData, function (i, v) {
    
            if (v[keytoSearch] == valuetoSearch) {
                alert(v[keytoGet].toString());
    
                return;
            }
        });
    
    
    
    };
    
    
    
    
    GDNUtils.searchJson = function (jsonData, keytoSearch, valuetoSearch) {
        GDNUtils.loadJquery();
        alert('here' + jsonData.length.toString());
        GDNUtils.loadJquery();
        var row;
        $.each(jsonData, function (i, v) {
    
            if (v[keytoSearch] == valuetoSearch) {
    
    
                row  = v;
            }
        });
    
        return row;
    
    
    
    }
    

  9. 9.나는 비슷한 조건의 종류가 플러스 내 검색 쿼리는 특정 개체 속성에 국한되지 (같은 "요한은"쿼리 LAST_NAME 속성도 FIRST_NAME과 일치되어야한다 검색). 약간의 시간을 보내고 난 후에 나는 구글의 각도 프로젝트에서이 기능을 얻었다. 그들은 모든 가능한 경우 알아서했다.

    나는 비슷한 조건의 종류가 플러스 내 검색 쿼리는 특정 개체 속성에 국한되지 (같은 "요한은"쿼리 LAST_NAME 속성도 FIRST_NAME과 일치되어야한다 검색). 약간의 시간을 보내고 난 후에 나는 구글의 각도 프로젝트에서이 기능을 얻었다. 그들은 모든 가능한 경우 알아서했다.

    /* Seach in Object */
    
    var comparator = function(obj, text) {
    if (obj && text && typeof obj === 'object' && typeof text === 'object') {
        for (var objKey in obj) {
            if (objKey.charAt(0) !== '$' && hasOwnProperty.call(obj, objKey) &&
                    comparator(obj[objKey], text[objKey])) {
                return true;
            }
        }
        return false;
    }
    text = ('' + text).toLowerCase();
    return ('' + obj).toLowerCase().indexOf(text) > -1;
    };
    
    var search = function(obj, text) {
    if (typeof text == 'string' && text.charAt(0) === '!') {
        return !search(obj, text.substr(1));
    }
    switch (typeof obj) {
        case "boolean":
        case "number":
        case "string":
            return comparator(obj, text);
        case "object":
            switch (typeof text) {
                case "object":
                    return comparator(obj, text);
                default:
                    for (var objKey in obj) {
                        if (objKey.charAt(0) !== '$' && search(obj[objKey], text)) {
                            return true;
                        }
                    }
                    break;
            }
            return false;
        case "array":
            for (var i = 0; i < obj.length; i++) {
                if (search(obj[i], text)) {
                    return true;
                }
            }
            return false;
        default:
            return false;
    }
    };
    

  10. 10.자바 스크립트와 JSON 개체 트리의 모든 노드를 트래버스

    자바 스크립트와 JSON 개체 트리의 모든 노드를 트래버스


  11. 11.당신은 jQuery를 사용할 필요가 없습니다. 일반 자바 스크립트는 할 것입니다. 나는 내 자신의 라이브러리를 쓴 그래서 다른 솔루션이 존재 해 없음 자바 스크립트, 그리고 위에 포트 XML 표준이 좌절되었다는 라이브러리를 추천하지 않을 것입니다.

    당신은 jQuery를 사용할 필요가 없습니다. 일반 자바 스크립트는 할 것입니다. 나는 내 자신의 라이브러리를 쓴 그래서 다른 솔루션이 존재 해 없음 자바 스크립트, 그리고 위에 포트 XML 표준이 좌절되었다는 라이브러리를 추천하지 않을 것입니다.

    내가 JSON와 함께 작동하도록 정규식을 적용.

    첫째, JSON 객체를 캐릭터 라인 화. 그런 다음 일치하는 문자열의 시작과 길이를 저장해야합니다. 예를 들면 :

    "matched".search("ch") // yields 3
    

    JSON 문자열의 경우,이 작품 정확히 같은 (당신이 (좀 전에 정규식을 수행하기 전에 JSON 객체로 변환 권하고 싶습니다이 경우 쉼표와 중괄호 명시 적으로 검색하지 않는 즉 생각한다, {,}).

    다음으로, 당신은 JSON 객체를 재구성 할 필요가있다. 내가 작성 알고리즘은 재귀 적으로 일치 인덱스에서 뒤로 이동하여 JSON 구문을 감지하여이 작업을 수행합니다. 예를 들어,로 보일 수 있습니다 의사 코드는 다음과 같습니다 :

    find the next key preceding the match index, call this theKey
    then find the number of all occurrences of this key preceding theKey, call this theNumber
    using the number of occurrences of all keys with same name as theKey up to position of theKey, traverse the object until keys named theKey has been discovered theNumber times
    return this object called parentChain
    

    이 정보는 키 값, 부모 오브젝트 체인을 반환하는 JSON 객체를 필터링 정규식을 사용하는 것이 가능하다.

    당신은 라이브러리와 코드 내가 http://json.spiritway.co/에서 저술 볼 수 있습니다

  12. from https://stackoverflow.com/questions/5288833/how-to-search-json-tree-with-jquery by cc-by-sa and MIT license