我有以下json输出
"lc_facts": {
"changed": false,
"failed": false,
"launch_configurations": [
{
"block_device_mappings": [
{
"device_name": "/dev/sda1",
"ebs": {
"delete_on_termination": true,
"volume_size": 40,
"volume_type": "gp2"
}
}
]
}
]
}
下面的查询
- debug:
msg: "{{ lc_facts.launch_configurations|json_query('[*].block_device_mappings[0].ebs.[volume_size]') | flatten }}"
给予
"msg": [
[40]
]
我想转换为整数,以便可以使用此值。我尝试了所有方法,但我只想获取没有括号的数字。最后我还添加了|int
,但它给了我0的值,这很奇怪。
请帮助,我真的很麻烦。
答案 0 :(得分:3)
括号创建一个列表。 “ [[40]]”是带有一个元素“ 40”的列表的列表。下面的游戏
vars:
var1: [[40]]
tasks:
- debug: var=var1
- debug: var=var1[0]
- debug: var=var1[0][0]
给予:
"var1": [
[
40
]
]
"var1[0]": [
40
]
"var1[0][0]": "40"
答案 1 :(得分:2)
尝试获取索引为[0]的列表的第一个元素。 如果该列表在另一个列表中,请执行两次:
对于msg = [40],请使用msg [0]
对于味精= [[40]]使用味精[0] [0]
答案 2 :(得分:0)
def dict_to_obj(obj, data):
for d in data:
if isinstance(data[d], dict):
setattr(obj, str(d), obj.__class__())
dict_to_obj(getattr(obj, str(d)), data[d])
else:
setattr(obj, str(d), data[d])
return obj
class Empty:pass
obj = Empty()
obj = dict_to_obj(obj,Your_JSON_object)
#Now here you get all json attributes as objects e.g.
#to get volume_size :
print(obj.lc_facts.launch_configurations.block_device_mappings.ebs.volume_size)
# but for this to work, you need to restructure your json nested key-value pairs like
# this :-
"launch_configuration" : {....}
# instead of this :-
"launch configuration" : [ {....} ]
我希望这会有所帮助。