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

问题描述 投票:0回答:1

我有一个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>

如果我将“role”属性添加到json中的所有对象,则代码可以正常工作。但我会有一些用户“角色”不在那里。对于那些我想跳过xml标签的人。

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

Chef::Mixin::Template::TemplateError (Undefined method or attribute `role' on `node') on line #6
json ruby chef erb chef-recipe
1个回答
3
投票

新的Chef中删除了属性的.foo语法,因此我们不建议您全部使用它。而是做<%= user["name"] %>然后为需要默认<%= user["role"] || "defaultvalue" %>的东西。

© www.soinside.com 2019 - 2024. All rights reserved.