代码之家  ›  专栏  ›  技术社区  ›  YS_NE

如何在Chef中处理JSON的可选方法/属性

  •  0
  • YS_NE  · 技术社区  · 8 年前

    我有一个chef erb文件,我在其中打印json中的值。JSON有一些可选的属性,比如下面。请注意,JSON的最后一个对象没有“role”属性。

    "users": [
      {"name" : "ccsup", "desc" :"abc", "role":"CS" },
      {"name" : "support", "desc" :"xyz", "role":"Operation" },
      {"name" : "admin", "desc" :"admin" }
    ]
    

    我在erb文件中读取这个json,并生成如下模板

    <% users = @users_json -%>
    <?xml version="1.0" encoding="UTF-8"?>
    <users>
        <% users.each do |user| -%>
        <user lockCount="0" name="<%= user.name -%>" desc="<%= user.desc -%>" status="A">
            <% if user.role -%>
            <role><%= user.role -%></role>
            <% end -%>
        </user>
        <% end -%>
    </users>
    

    如果我向JSON中的所有对象添加“role”属性,那么代码就可以工作了。但是我会有一些用户“角色”不在那里。对于那些,我想跳过XML标记。

    如果我对某些对象没有“角色”属性,我会

    Chef::Mixin::Template::TemplateError (Undefined method or attribute `role' on `node') on line #6
    
    1 回复  |  直到 8 年前
        1
  •  3
  •   coderanger    8 年前

    这个 .foo 属性的语法已在较新的chef中删除,因此我们不建议您全部使用。改为 <%= user["name"] %> 然后对于需要违约的事情 <%= user["role"] || "defaultvalue" %> .

    推荐文章