gpt4 book ai didi

javascript - Oboe.js - 如何使用可链接方法和检索祖先值

转载 作者:行者123 更新时间:2023-11-30 16:16:33 25 4
gpt4 key购买 nike

我正在使用 oboe.js,我想从 Node “部分”检索数据,并将祖先 profile_namespace 和 owner_name 映射到从部分 Node 检索的数据(请参阅下面的 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 “部分”检索数据,但我在文档中看到 .node 返回可链接的方法,并且可以使用“祖先”的概念从父 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));
}
});

感谢您的帮助!

多米尼克

最佳答案

如果我误解了您问题的某些部分,请告诉我,我会更新我的答案。

在双簧管中使用祖先

您传递给 Node 监听器的回调函数将使用三个参数触发。第一个是树中已匹配的 Node ,第二个是表示该 Node 路径的数组,第三个是表示该 Node 祖先的对象数组。这记录在 node-event section 的末尾附近的 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.createReadStreamfs.createWriteStream,Node(至少 v0.10.41)会抛出错误/'。我建议使用 './myjson.json''showInfo.json'

  • 调用它们
  • 我建议使用在 Oboe 中注册 Node 监听器的简写方式。这只是一种风格偏好。如果您要注册多个监听器,其他语法可能会有用,但我认为在这种情况下链接同样好。

我对您发布的代码的建议实现

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));

}
});

关于javascript - Oboe.js - 如何使用可链接方法和检索祖先值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35435543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com