使用xpath从json对象快速检索数据

时间:2015-05-23 09:22:39

标签: javascript json xpath

我有一个非常大的数据集,可能包含数千个记录层次结构

records
 ->record1
   ->main_record
   ->minor_record
        ->fields
->record2
    ->main_record
        ->data_records
            ->fields_records
                ->fields

根据输入文件,这个层次结构可以更加休息,它可能包含数百个像record1 record2这样的记录,这里有一件事我必须提到数据没有按级别排序。

现在假设我想在fields中找到fields_record而不是XPath

record2/main_record/data_records/fields_records/fields

找到的一种方法是循环整个数据集并找到不合理的所需记录,我用于搜索数据的方式是:

function main() {
  var dataset = getDataFromService();
  getResult(dataset, xpath);
}

function getdataset(dataset, nametosearch) {
  for (var i = 0; i < dataset.length; i++) {
    if (dataset[i].name == nametosearch) {
      return dataset[i];
    }
  }
}

function getResult(dataset, xpath) {
  if (xpath.indexOf('/') > -1) {
    var splitArray[] = xpath.split("/");
    for (var i = 0; i < splitArray.length; i++) {
      dataset = getdataset(dataset, splitArray[i]);
    }
    return dataset;
  } else {
    getdataset(dataset, xpath); //else part to get records at root level
  }
}

使用上面提到的代码我可以获得我想知道的数据这种方式有效吗?如果不是什么是使用XPath获取数据的更好选择?

1 个答案:

答案 0 :(得分:1)

尝试JSONPath.

Eaxmple:
JSON:

{
     "firstName": "John",
     "lastName" : "doe",
     "age"      : 26,
     "address"  : {
         "streetAddress": "naist street",
         "city"         : "Nara",
         "postalCode"   : "630-0192"
     },
     "phoneNumbers": [
         {
           "type"  : "iPhone",
           "number": "0123-4567-8888"
         },
         {
           "type"  : "home",
           "number": "0123-4567-8910"
         }
     ]
 }



路径:$ PHONENUMBERS [1] .TYPE

结果:&#34; iPhone&#34;