tl;dr
import ast
desired_dict = ast.literal_eval(module.params['json_str'])
Machen wir das.
Wenn Sie ein Ansible-Playbook schreiben, In vielen Fällen wird eine JSON-Datei gelesen und als Zeichenfolge übergeben.
tasks:
- name: Update
spam_module:
state: present
json_str: "{{ lookup('file', 'ham.json') }}"
Um dies im Modul zu lesen
argument_spec.update(
dict(
json_str=dict(type='str', required=True),
state=dict(default='present', type='str', choices=['present', 'absent']),
)
)
module = AnsibleModule(argument_spec=argument_spec)
print(module.params['json_str'])
Ich kann es lesen, indem ich so etwas mache
Doppelte Anführungszeichen werden in module.params
in einfache Anführungszeichen umgewandelt.
Zu diesem Zeitpunkt schlägt der Versuch, in JSON zu konvertieren, leicht fehl.
desire_dict = json.loads(module.params['json_str'])
# Fail!!!
In einfache Anführungszeichen eingeschlossene Zeichenfolgen können in Python als Abstract Syntax Tree behandelt werden.
desired_dict = ast.literal_eval(module.params['json_str'])
Es ist eine gute Idee, es mit ast.literal_eval
in ein Wörterbuch zu konvertieren.
Ich möchte zwei JSONs für die Gleichheitsprüfung vergleichen Ich habe es in ein Wörterbuch gelegt und verglichen.
JSON garantiert jedoch nicht die Reihenfolge der Listen, Wörterbücher garantieren jedoch die Reihenfolge, sodass es sich nicht um einen strengen Vergleich handelt. So etwas ist in Ansible üblich, also lasst uns unser Bestes geben.
Recommended Posts