如何在 Chef 中处理 json 的可选 methods/attributes
How to handle optional methods/attributes of json in Chef
我有一个 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 中的所有对象,则代码可以正常工作。但是我会有一些用户 "role" 不会在那里。对于那些我想跳过 xml 标签。
如果某些对象没有 "role" 属性,我会得到
Chef::Mixin::Template::TemplateError (Undefined method or attribute `role' on `node') on line #6
属性的 .foo
语法已在较新的 Chef 中删除,因此我们不建议您全部使用它。取而代之的是 <%= user["name"] %>
然后对于需要默认值的东西 <%= user["role"] || "defaultvalue" %>
.
我有一个 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 中的所有对象,则代码可以正常工作。但是我会有一些用户 "role" 不会在那里。对于那些我想跳过 xml 标签。
如果某些对象没有 "role" 属性,我会得到
Chef::Mixin::Template::TemplateError (Undefined method or attribute `role' on `node') on line #6
属性的 .foo
语法已在较新的 Chef 中删除,因此我们不建议您全部使用它。取而代之的是 <%= user["name"] %>
然后对于需要默认值的东西 <%= user["role"] || "defaultvalue" %>
.