2014-09-03 5 views
-1

Я использую JSON Parser на основе http://techslides.com/how-to-parse-and-search-json-in-javascript/, чтобы разобрать дерево, находящее пару ключ/значение, в примере, которое показывает, что он может извлекать ключи или значения на основе любого заданного ввода.JSON Parsing сообщает пустой массив

В моем случае, независимо от того, что я дал ему в качестве ввода, он возвращает только пустой массив.

JSON

{ 
    "DATA_HEADER": { 
     "0": "Division", 
     "1": "District", 
     "2": "Area", 
     "3": "Project", 
     "4": "Object Type Prefix", 
     "5": "Object Type", 
     "6": "Category" 
    }, 
    "DATA_SOURCE_DEPENDENT":{ 
     "Division1" : { 
      "checked": true, 
      "level": 1, 
      "District1-1": { 
       "checked": true, 
       "level": 2, 
       "Area1-1-1": { 
        "checked": true, 
        "level": 3, 
        "Project1-1-1-1": { 
         "checked": true, 
         "level": 4 
        } 
       }, 
       "Area1-1-2": { 
        "checked": true, 
        "level": 3, 
        "Project1-1-2-1": { 
         "checked": true, 
         "level": 4, 
         "05": { 
          "checked": true, 
          "level": 5 
         } 
        } 
       } 
      } 
     }, 
     "Division2" : { 
      "checked": true, 
      "level": 1, 
      "District2-1": { 
       "checked": true, 
       "level": 2, 
       "Area2-1-1": { 
        "checked": true, 
        "level": 3, 
        "Project2-1-1-1": { 
         "checked": true, 
         "level": 4 
        } 
       }, 
       "Area2-1-2": { 
        "checked": true, 
        "level": 3, 
        "Project2-1-2-1": { 
         "checked": true, 
         "level": 4, 
         "05": { 
          "checked": true, 
          "level": 5, 
          "Frag": { 
           "checked": true, 
           "level": 6 
          } 
         }, 
         "Excavator": { 
          "checked": true, 
          "level": 7 
         } 
        } 
       } 
      } 
     }, 
     "Division3" : { 
      "checked": true, 
      "level": 1 
     }, 
     "Division4" : { 
      "checked": true, 
      "level": 1 
     }, 
     "Division5" : { 
      "checked": true, 
      "level": 1 
     }, 
     "Division6" : { 
      "checked": true, 
      "level": 1 
     }, 
     "Division7" : { 
      "checked": true, 
      "level": 1 
     }, 
     "Division8" : { 
      "checked": true, 
      "level": 1 
     } 
    } 
    } 

Я использовал код, основанный на вышеуказанном URL.

JS

//return an array of objects according to key, value, or key and value matching 
function getObjects(obj, key, val) { 
    var objects = []; 
    for (var i in obj) { 
     if (!obj.hasOwnProperty(i)) continue; 
     if (typeof obj[i] == 'object') { 
      objects = objects.concat(getObjects(obj[i], key, val));  
     } else 
     //if key matches and value matches or if key matches and value is not passed (eliminating the case where key matches but passed value does not) 
     if (i == key && obj[i] == val || i == key && val == '') { // 
      objects.push(obj); 
     } else if (obj[i] == val && key == ''){ 
      //only add if the object is not already in the array 
      if (objects.lastIndexOf(obj) == -1){ 
       objects.push(obj); 
      } 
     } 
    } 
    return objects; 
} 

//return an array of values that match on a certain key 
function getValues(obj, key) { 
    var objects = []; 
    for (var i in obj) { 
     if (!obj.hasOwnProperty(i)) continue; 
     if (typeof obj[i] == 'object') { 
      objects = objects.concat(getValues(obj[i], key)); 
     } else if (i == key) { 
      objects.push(obj[i]); 
     } 
    } 
    return objects; 
} 

//return an array of keys that match on a certain value 
function getKeys(obj, val) { 
    var objects = []; 
    for (var i in obj) { 
     if (!obj.hasOwnProperty(i)) continue; 
     if (typeof obj[i] == 'object') { 
      objects = objects.concat(getKeys(obj[i], val)); 
     } else if (obj[i] == val) { 
      objects.push(i); 
     } 
    } 
    return objects; 
} 


var json = '{"DATA_HEADER":{"0":"Division","1":"District","2":"Area","3":"Project","4":"Object Type Prefix","5":"Object Type","6":"Category"},"DATA_SOURCE_DEPENDENT":{"Division1":{"checked":true,"level":1,"District1-1":{"checked":true,"level":2,"Area1-1-1":{"checked":true,"level":3,"Project1-1-1-1":{"checked":true,"level":4}},"Area1-1-2":{"checked":true,"level":3,"Project1-1-2-1":{"checked":true,"level":4,"05":{"checked":true,"level":5}}}}},"Division2":{"checked":true,"level":1,"District2-1":{"checked":true,"level":2,"Area2-1-1":{"checked":true,"level":3,"Project2-1-1-1":{"checked":true,"level":4}},"Area2-1-2":{"checked":true,"level":3,"Project2-1-2-1":{"checked":true,"level":4,"05":{"checked":true,"level":5,"Frag":{"checked":true,"level":6}},"Excavator":{"checked":true,"level":7}}}}},"Division3":{"checked":true,"level":1},"Division4":{"checked":true,"level":1},"Division5":{"checked":true,"level":1},"Division6":{"checked":true,"level":1},"Division7":{"checked":true,"level":1},"Division8":{"checked":true,"level":1}}}'; 

var js = JSON.parse(json); 

//example of grabbing objects that match some key and value in JSON 
console.log(getObjects(js.DATA_SOURCE_DEPENDENT,'checked','true')); 

//example of grabbing objects that match some key in JSON 
console.log(getObjects(js.DATA_SOURCE_DEPENDENT,'District1-1','')); 

//example of grabbing obejcts that match some value in JSON 
console.log(getObjects(js.DATA_SOURCE_DEPENDENT,'','Project2-1-1-1')); 

//example of grabbing values from any key passed in JSON 
console.log(getValues(js.DATA_SOURCE_DEPENDENT,'District1-1')); 

//example of grabbing keys by searching via values in JSON 
console.log(getKeys(js.DATA_SOURCE_DEPENDENT,'Project2-1-1-1')); 

Я приложил plnkr, основанную на выше http://plnkr.co/edit/xjKMn5eOghoJPguXalnc?p=preview

ответ

0

Похож на первый console.log, по крайней мере, вы проверяете для 'true' (строки), где ваши ценности true (булево).

Я считаю, что во втором вопросе стоит else перед вашим комментарием, удалите это, и вы получите свой результат.

+0

Не могли бы вы объяснить это в приведенной ссылке plnkr. – cs1193

+0

Строка 9 - Удалите 'else' Строка 57 - удалите цитаты вокруг 'true' – Jason

Смежные вопросы