使用 YAML::Emitter 将嵌套映射和序列写入 yaml 文件

     2023-02-16     266

关键词:

【中文标题】使用 YAML::Emitter 将嵌套映射和序列写入 yaml 文件【英文标题】:Writing nested maps and sequences to a yaml file using YAML::Emitter 【发布时间】:2018-02-07 09:58:25 【问题描述】:

我一直在尝试使用 YAML::Emitter 输出 yaml 文件。例如,我需要这样的东西作为我的 yaml 文件。

annotations:
  - run:
     type: range based
     attributes:
      start_frame:
       frame_number: 25
      end_frame:
       frame_number: 39     

到目前为止,使用我的代码

for (auto element : obj)

    basenode = YAML::LoadFile(filePath);  //loading a file throws exception when it is not a valid yaml file

    //Check if metadata is already there
    if (!basenode["file_reference"])
    
        writeMetaData(element.getGttStream(), element.getTotalFrames(), element.getFileHash());
    

    annotationNode["annotations"].push_back(element.getGestureName());

    annotationNode["type"] = "range based";
    output << annotationNode;

    attributesNode["attributes"]["start_frame"]["frame_number"] = element.getStartFrame();

    attributesNode["attributes"]["end_frame"]["frame_number"] = element.getEndFrame();

    output << typeNode;
    output << attributesNode;

    ofs.open(filePath, std::ios_base::app);
    ofs << std::endl << output.c_str();

我得到这样的输出

annotations:
  - run
type: range based
---
attributes:
 start_frame:
  frame_number: 26
 end_frame:
  frame_number: 57

我希望将最近推送的序列项下的“类型”和“属性”放入“注释”中,随后对所有以下节点都相同。

我什至尝试过使用类似的东西

annotationNode[0][type] = "基于范围"

输出是这样的

0:类型:“基于范围”

如何获取序列“注释”中最近推送的项目?

【问题讨论】:

写完整的例子更有帮助;您的代码相当全面,但没有显示您的变量是什么类型(例如,annotationNode 何时定义?) 【参考方案1】:

如果您正在构建根节点annotationNode,那么只需构建它并输出一次。您不需要将typeNodeattributesNode 写入发射器。例如,你可以写

YAML::Node annotationNode;
for (auto element : obj) 
  YAML::Node annotations;
  annotations["name"] = element.getGestureName();
  annotations["type"] = ...;
  annotations["attributes"] = ...;
  annotationNode["annotations"] = annotations;


output << annotationNode;

【讨论】:

感谢杰西的回答。我已经实现了它及其工作。也许我没有清楚地提出我的问题。我需要将“名称”作为序列项并将子项添加到其中,然后再添加子项。类似this 也许可以澄清您的问题?如果您有一个可行的解决方案,请随时将其编写为解决方案,以便其他有您问题的人可以看到该解决方案。 我关注了您的answer 作为参考。我会将您的评论标记为答案,但我仍然不知道如何实现here 所示的格式

使用SnakeYAML Java将用户作为嵌套在块序列中的块映射添加到yml文件

】使用SnakeYAMLJava将用户作为嵌套在块序列中的块映射添加到yml文件【英文标题】:AddingusertoymlfileasBlockmappingnestedinablocksequence,usingSnakeYAMLJava【发布时间】:2016-09-1716:54:53【问题描述】:我正在使用ElasticSearch,我遇到了一个名为Re... 查看详情

Yaml-cpp (new API) - 嵌套映射/序列组合和迭代

】Yaml-cpp(newAPI)-嵌套映射/序列组合和迭代【英文标题】:Yaml-cpp(newAPI)-nestedmap/sequencecombinationsanditeration【发布时间】:2014-03-1911:41:12【问题描述】:我在这个api处理地图与序列方面遇到了相当基本的问题。假设我有以下结构:foo_... 查看详情

如何使用 JSON.NET 反序列化为嵌套/递归字典和列表?

】如何使用JSON.NET反序列化为嵌套/递归字典和列表?【英文标题】:HowdoIuseJSON.NETtodeserializeintonested/recursiveDictionaryandList?【发布时间】:2011-07-2914:28:52【问题描述】:我需要将复杂的JSONblob反序列化为标准.NET容器,以便在不了解J... 查看详情

Unity 将嵌套字典序列化为 JSON

...toJSON【发布时间】:2017-02-0802:24:34【问题描述】:我正在使用的REST服务RSAArcher需要一个整数键,这意味着我根本无法嵌套[Serializable]对象和JsonUtility.ToJson()来创建序列化的JSON字符串。我想我找到了一个解决方案来创建一个Dictionar... 查看详情

使用映射库将嵌套对象映射到 C# 中的自定义对象

】使用映射库将嵌套对象映射到C#中的自定义对象【英文标题】:MapNestedobjecttoacustomobjectinC#usingamappinglibrary【发布时间】:2018-10-3113:37:38【问题描述】:我有以下对象结构:///<summary>///nestedmessageinstanceprovidedbyabusinessservice///&l... 查看详情

使用 Jackson 将嵌套数组反序列化为 ArrayList

】使用Jackson将嵌套数组反序列化为ArrayList【英文标题】:DeserializenestedarrayasArrayListwithJackson【发布时间】:2015-03-0919:53:45【问题描述】:我有一段JSON,看起来像这样:"authors":"author":["given-name":"AdrienneH.","surname":"Kovacs","given-name":"P... 查看详情

使用 Protobuf 和内存映射文件 C# 的 IPC

】使用Protobuf和内存映射文件C#的IPC【英文标题】:IPCUsingProtobufandMemoryMappedFilesC#【发布时间】:2016-03-3017:20:27【问题描述】:我正在编写一个项目来将对象从父应用程序传递到子应用程序。我正在使用Protobuf序列化和反序列化数... 查看详情

使用 create 回调将嵌套对象映射为复杂 JSON 中的 observable

】使用create回调将嵌套对象映射为复杂JSON中的observable【英文标题】:MappinganestedobjectasanobservablefromacomplexJSONusingthecreatecallback【发布时间】:2018-10-3107:38:51【问题描述】:我有一个JSON格式的复杂对象。我正在使用KnockoutMapping,自... 查看详情

使用 boost::serialization 将对象映射序列化为 xml

】使用boost::serialization将对象映射序列化为xml【英文标题】:Serializingamapofobjectstoxmlusingboost::serialization【发布时间】:2010-07-1907:07:36【问题描述】:下面的序列化示例来自boostmailinglist,这与我想做的几乎相同。但是,我更改了存... 查看详情

Clojure:如何将映射条目的惰性序列转换为结构映射?

...2012-06-1623:39:20【问题描述】:我是clojure的新手,一直在使用enlive来转换html文档的文本节点。我的最终目标是将结构转换回html、标签和所有内容。我目前能够获取enlive-html/html-res 查看详情

使用springresttemplate将嵌套的json对象映射到java类

...这可能很简单。但是,我无法让它发挥作用。所以我试图使用SpringRestTemplate来映射我的JSON数据。我有一个来自休息电话的JSON响应。{"message":"ok","status":"ok","data":[{"Name":"Yo","Address":"100TestRd"},{...},{...}]}这是我试图将它映射到的类。@... 查看详情

使用嵌套对象和中间步骤进行反序列化

】使用嵌套对象和中间步骤进行反序列化【英文标题】:Deserializationwithnestedobjectandin-betweenstep【发布时间】:2021-07-2901:32:30【问题描述】:我正在尝试使用System.Text.JsonJsonSerializer序列化/反序列化对象。我的容器对象是一个“Licen... 查看详情

如何使用本机查询映射嵌套投影

】如何使用本机查询映射嵌套投影【英文标题】:Howtomapnestedprojectionswithnativequery【发布时间】:2019-02-2219:50:40【问题描述】:我想将我的查询结果映射到RequestProjection接口值。以下代码有效并返回请求ID和提交日期。我也需要返... 查看详情

RestKit:将嵌套数组映射到对象

】RestKit:将嵌套数组映射到对象【英文标题】:RestKit:MapnestedArraytoObject【发布时间】:2013-11-2614:37:34【问题描述】:我有两个类来映射JSON响应:Item和FrequentProps项目具有以下属性:frequentProps,identifier,nameFrequentProps有属性propOneprop... 查看详情

yams-cpp 嵌套序列返回映射而不是值

】yams-cpp嵌套序列返回映射而不是值【英文标题】:yams-cppnestedsequencereturningmapinsteadofvalue【发布时间】:2016-09-2120:55:30【问题描述】:我正在尝试解析以下config.yaml文件。config.yamlfoo:bar:baz:[1,2,3,4]bam:"some_string_value"test.cppYAML::Nodeconf... 查看详情

0.automapper

AutoMapper是基于约定的对象-对象映射器。AutoMapper使用流畅的配置API来定义对象-对象映射策略。AutoMapper使用基于约定的匹配算法来匹配源到目标值。AutoMapper面向模型投影场景,将复杂的对象模型变成DTO和其他简单对象,这些对象... 查看详情

如何使用 reactjs 和 graphql 在 gatsby 中映射嵌套数组

】如何使用reactjs和graphql在gatsby中映射嵌套数组【英文标题】:Howtomapnestedarrayingatsbywithreactjsandgraphql【发布时间】:2020-01-1607:48:42【问题描述】:我有一个组件menu.js,我将其导入页面以生成可以按类别过滤的文章列表。这完美无... 查看详情

如何将具有嵌套对象的复杂 json 文件映射到 java 对象?

】如何将具有嵌套对象的复杂json文件映射到java对象?【英文标题】:HowwouldImapacomplexjsonfilewithnestedobjectstojavaobjects?【发布时间】:2019-07-0609:19:05【问题描述】:我有一个由多个嵌套对象和对象数组组成的复杂Json文件。第一个对... 查看详情