我使用的是oboe.js,我希望从节点“节”中检索数据,并将祖先profile_namespace和owner_name映射到节节点的数据检索(参见下面的json文件摘录)。
JSON文件提取(myjson.json):
{
"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"
}]
}
}]
}现在,我只能从节点“区段”检索数据,但我在文档中看到,.node返回可链接的方法,并且可以使用“祖先”的概念从父节点检索数据。
有人能解释我如何使用这个方法(见下面的代码)吗?
码
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));
}
});谢谢你的帮忙!
多米尼克
发布于 2016-02-17 03:55:24
如果我误解了你问题的部分内容,请告诉我,并更新我的答案。
在双簧管中使用祖先
传递给节点侦听器的回调函数将使用三个参数触发。第一个是已匹配的树中的节点,第二个是表示该节点的路径的数组,第三个是代表该节点祖先的对象数组。这是在API的节点-事件部分末尾附近记录的。
.node({
'sections': function(sections, path, ancestors) {
var grandparent = ancestors[ancestors.length - 2];
console.log(grandparent.owner_name); // Dominic
var greatGrandparent = ancestors[ancestors.length - 3];
console.log(greatGrandparent.profile_namespace); // DS
}
});其他事情
以下是一些我认为值得提及的不相关的事情
SetList。
var SetList = require('fs');setList初始化为fs模块的实例。由于稍后您将重新定义它,所以只需声明该变量,而无需实例化它。更好的是,您可以在回调中定义它,因为它是唯一使用的地方。fs.createReadStream开头的字符串上调用fs.createWriteStream或'/'时抛出一个错误。我建议用'./myjson.json'和'showInfo.json'给他们打电话我建议你发布的代码的实现
var oboe = require('oboe');
var fs = require('fs');
oboe(fs.createReadStream('./myjson.json'))
.node('sections', function(sections, path, ancestors) {
var mutatedSections = sections;
// change mutatedSections however you want
var showInfo = fs.createWriteStream('./showInfo.json');
showInfo.write(JSON.stringify(mutatedSections));
}
});https://stackoverflow.com/questions/35435543
复制相似问题