要使用从 json 收集的变量,我需要它是原始的,不带引号:
我有
ok: [device] => {
"fact": {
"int": "7"
},
}
Run Code Online (Sandbox Code Playgroud)
我想
ok: [device] => {
"fact": {
"int": 7
},
}
Run Code Online (Sandbox Code Playgroud)
问题是引号不是变量的一部分,所以我无法使用| int
或| replace
删除引号。
有办法吗?
Jinja表达式的结果始终是一个字符串。你无法得到一个整数。我猜你真正想要的是字典fact中属性int的值是一个整数。测试当前值,例如
- debug:
var: fact.int
- debug:
var: fact.int|type_debug
Run Code Online (Sandbox Code Playgroud)
如果属性int的值是一个字符串,您将得到(缩写)
fact.int: '7'
fact.int|type_debug: AnsibleUnicode
Run Code Online (Sandbox Code Playgroud)
您可以将字符串转换为整数,例如
- set_fact:
fact: "{{ fact|combine({'int': _int|int}) }}"
vars:
_int: "{{ fact.int }}"
- debug:
var: fact.int
- debug:
var: fact.int|type_debug
Run Code Online (Sandbox Code Playgroud)
你会得到(精简)
fact.int: '7'
fact.int|type_debug: int
Run Code Online (Sandbox Code Playgroud)
现在,属性int的值是一个整数。但是,Jinja 表达式的结果var: fact.int
仍然是一个 string fact.int: '7'
。
笔记