2016-07-16 105 views
1

我一直在玩一个名为JSON-Query的NPM模块,我最初可以使用嵌入在我的js中的JSON创建模块函数。异步查询JSON对象

我花了大约两天试图让它查询外部和JSON文件的JSON。

正在运行的原始代码看起来像这样。

var jsonQuery = require('json-query') 
var data = { 
    people: [ 
    {name: 'Matt', country: 'NZ'}, 
    {name: 'Pete', country: 'AU'}, 
    {name: 'Mikey', country: 'NZ'} 
    ] 
} 

jsonQuery('people[country=NZ].name', { 
    data: data 
}) //=> {value: 'Matt', parents: [...], key: 0} ... etc 

我能够查询内部JSON以查找我正在查找的密钥。

我意识到我需要在代码生效期间更新JSON的能力,所以我将JSON移到了它自己的文件中。

目前我的主要JS文件看起来像这样。

var jsonQuery = require('json-query'); 
var fs = require('fs'); 

function querydb(netdomain){ 
fs.readFile('./querykeys.json', 'utf8', function (err, data) { 
    if (err){console.log('error');} 
    var obj = JSON.parse(data); 

    console.log(jsonQuery('servers[netshare=Dacie2015].netdomain', { 
      obj: obj 
     })); 



}); 
} 

querydb(); 

包含json的我的JSON文件如下所示。

{ 
      "servers": [ 
      {"netdomain": "google.com", "netshare": "password", "authip":"216.58.203.46"}, 
      {"netdomain": "localhost", "netshare": "localghost", "authip":"127.0.0.1"}, 
      {"netdomain": "facebook.com", "netshare": "timeline", "authip":"31.13.69.228"} 
      ] 
} 

我已经遇到了这个问题,我无法再查询JSON,当函数QueryDB()是跑了,不管是什么查询JSON的地方,我没有得到任何回应定位我键。

目前我从服务器获取当我尝试查询JSON文件的响应

{ value: null, 
    key: 'netdomain', 
    references: [], 
    parents: [ { key: 'servers', value: null }, { key: null, value: null } ] } 

要非常清楚,我相信我的问题是,我把我的目标发挥作用的方式,我都玩过与JSON-Query的结构并无法完成能够隔离密钥。

任何帮助将是惊人的,说我有可能在NPM在[NPM] https://www.npmjs.com/package/json-query

找到工作模块谢谢

回答

2

我认为这只是一个错字。不应该这样:

obj: obj 

是这个吗?

data: obj 
+0

This Worked!这行代码的功能是什么?我明白obj来自JSON的解析,是数据:函数的回应是什么? –

+1

数据是数组中的关键。 '{data:obj}'表示有一个数组,其中''data“作为键,'obj'作为值。你所调用的函数期望有一个叫做“data”的键,所以你需要使用它。 – smarx