Javascript Oboe.js-如何使用可链接方法和检索祖先值
我正在使用oboe.js,我希望从节点“sections”检索数据,并将祖先配置文件名称空间和所有者名称映射到从sections检索的数据节点(请参见下面的json文件摘录) JSON文件提取(myjson.JSON):Javascript Oboe.js-如何使用可链接方法和检索祖先值,javascript,node.js,oboe.js,Javascript,Node.js,Oboe.js,我正在使用oboe.js,我希望从节点“sections”检索数据,并将祖先配置文件名称空间和所有者名称映射到从sections检索的数据节点(请参见下面的json文件摘录) JSON文件提取(myjson.JSON): { "data": [{ "profile_namespace": "DS", "tutorial": { "owner_name": "Dominic", "picture_url": "/picture.jpg", "
{
"data": [{
"profile_namespace": "DS",
"tutorial": {
"owner_name": "Dominic",
"picture_url": "/picture.jpg",
"title": "The code",
"url": "/Dominic/thecode/",
"sections": [{
"episode_url": "/tutorial/intro/symphony-of-war/",
"artist": "MasterOrchestra",
"title": "Symphony of War"
}, {
"episode_url": "/tutorial/mainshow/musicproductiontip1/",
"artist": "DStone",
"title": "Music production tip 1"
}, {
"episode_url": "/tutorial/outrothe/nextshow/",
"artist": "MasterOrchestra",
"title": "Next show"
}]
}
}]
}
现在我只能从节点“sections”检索数据,但我在文档中看到.node返回chainable方法,并且可以使用“祖先”的概念从父节点检索数据
有人能告诉我如何使用这个方法吗(见下面我的代码)
代码
var oboe = require('oboe');
var fs = require('fs');
var SetList = require('fs');
var setList = [];
var showInfo = require('fs');
oboe(fs.createReadStream('/myjson.json'))
.node({
'sections': function(node) {
setList.push(node);
showInfo = fs.createWriteStream('/showInfo.json');
showInfo.write(JSON.stringify(setList));
}
});
谢谢你的帮助
多米尼克如果我误解了你的部分问题,请告诉我,我会更新我的答案 双簧管中使用祖先 传递给节点侦听器的回调函数将使用三个参数启动。第一个是树中已匹配的节点,第二个是表示该节点路径的数组,第三个是表示该节点祖先的对象数组。这在API的结尾处有文档记录
.node({
“节”:函数(节、路径、祖先){
var祖父母=祖先[祖先.长度-2];
console.log(祖父母.owner_name);//多米尼克
var great祖父母=祖先[祖先.length-3];
console.log(greatGrandparent.profile_命名空间);//DS
}
});
其他事情
以下是一些我认为值得一提的不相关的事情
- 由于未使用变量
,您可能可以删除此行SetList
var SetList=require('fs')代码>
- 您不需要将
初始化为setList
模块的实例。因为您稍后将重新定义它,所以您可以只声明该变量而不实例化它。更好的是,您可以在回调中定义它,因为它是唯一使用它的地方fs
- 如果对以
“/”开头的字符串调用
或fs.createReadStream
,则节点(至少v0.10.41)将抛出错误。我建议用fs.createWriteStream
和'./myjson.json'
'showInfo.json'
- 我建议使用在双簧管中注册节点侦听器的速记方式。这只是一种风格偏好。如果要注册多个侦听器,其他语法可能会很有用,但我认为链接在这种情况下也同样有用
var-oboe=require('oboe');
var fs=需要('fs');
双簧管(fs.createReadStream('./myjson.json'))
.node(“节”,函数(节,路径,祖先){
var mutatedSections=截面;
//根据您的需要更改mutatedSections
var showInfo=fs.createWriteStream('./showInfo.json');
write(JSON.stringify(mutatedSections));
}
});
谢谢您的解释。我现在了解了如何管理祖先节点和转换数据,以获得所需的结构:O) 太棒了,很高兴我能帮忙!你能接受这个答案吗?现在我得到一个无效的JSON文件。问题在于,每个mutatedSection都作为一个有效的JSON进行注释合并。在每个mutatedSections节点之后,我得到的是“][”而不是“,”。你知道如何在最后获得无效的json文件吗?现在,我需要用逗号替换所有“][”。谢谢!我刚刚注意到我的json示例应该有多个“sections”节点。