Fix xml to json converter
[anna.git] / example / diameter / launcher / resources / rest_api / helpers / diameterJsonHelper / xml2json.py
1 #!/usr/bin/python3
2 #
3 # Converts Anna-Diameter XML files to JSON format.
4 # Useful to build json content for ADML REST API:
5 # * Services:
6 #     python3 xml2json.py services.xml servicesJson
7 #
8 # * Diameter messages:
9 #     python3 xml2json.py CCR.xml diameterJson
10 #
11 # * Just xml to json:
12 #     python3 xml2json.py file.xml
13
14 import xmltodict
15 import json
16 import sys
17
18 try:
19   file = sys.argv[1]
20 except:
21   print("Usage: " + sys.argv[0] + " <diameter xml file> [parent name (i.e.: servicesJson, diameterJson), none by default]\n")
22   print("       Converts Anna-Diameter XML files to JSON format.")
23   print("       Useful to build json content for ADML REST API:\n")
24   print("       - Services:")
25   print("            python3 xml2json.py services.xml servicesJson\n")
26   print("       - Diameter messages:")
27   print("            python3 xml2json.py CCR.xml diameterJson\n")
28   print("       - Direct xml into json format:")
29   print("            python3 xml2json.py file.xml")
30   sys.exit(1)
31
32 try:
33   with open(file, 'r') as myfile:
34     xml = myfile.read()
35 except:
36   print("ERROR reading '" + file + "'")
37   sys.exit(1)
38
39 parent = None
40 try:
41   parent = sys.argv[2]
42 except:
43   pass
44
45 # although default attribute prefix is '@', anyway we will
46 # force the value just in case xmltodict implementation
47 # changes. The anna::core::functions::json2xml helper,
48 # assumes this prefix in order to work properly.
49 result=xmltodict.parse(xml, force_list={'avp'}, attr_prefix='@')
50
51 if parent:
52   result = { parent: result }
53
54 print (json.dumps(result, indent=3, sort_keys=True))