首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oboe.js -如何使用可链式方法和检索祖先值

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

Stack Overflow用户
提问于 2016-02-16 14:46:29
回答 1查看 384关注 0票数 1

我使用的是oboe.js,我希望从节点“节”中检索数据,并将祖先profile_namespace和owner_name映射到节节点的数据检索(参见下面的json文件摘录)。

JSON文件提取(myjson.json):

代码语言:javascript
复制
{
  "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返回可链接的方法,并且可以使用“祖先”的概念从父节点检索数据。

有人能解释我如何使用这个方法(见下面的代码)吗?

代码语言:javascript
复制
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));
        }
    });

谢谢你的帮忙!

多米尼克

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-17 03:55:24

如果我误解了你问题的部分内容,请告诉我,并更新我的答案。

在双簧管中使用祖先

传递给节点侦听器的回调函数将使用三个参数触发。第一个是已匹配的树中的节点,第二个是表示该节点的路径的数组,第三个是代表该节点祖先的对象数组。这是在API的节点-事件部分末尾附近记录的。

代码语言:javascript
复制
.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

    }
});

其他事情

以下是一些我认为值得提及的不相关的事情

  • 您可能可以删除这一行,因为没有使用变量SetListvar SetList = require('fs');
  • 您不需要将setList初始化为fs模块的实例。由于稍后您将重新定义它,所以只需声明该变量,而无需实例化它。更好的是,您可以在回调中定义它,因为它是唯一使用的地方。
  • 节点(至少v0.10.41)在以fs.createReadStream开头的字符串上调用fs.createWriteStream'/'时抛出一个错误。我建议用'./myjson.json''showInfo.json'给他们打电话
  • 我建议使用在双簧管中注册节点侦听器的速记方式。这个只是一种文体上的偏好。如果您要注册多个侦听器,则另一种语法可能很有用,但我认为在这种情况下,链接也一样好。

我建议你发布的代码的实现

代码语言:javascript
复制
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));

    }
  });
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35435543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档