#!/usr/bin/python3
+#
+# Converts Anna-Diameter XML files to JSON format.
+# Useful to build json content for ADML REST API:
+# * Services:
+# python3 xml2json.py services.xml servicesJson
+#
+# * Diameter messages:
+# python3 xml2json.py CCR.xml diameterJson
+#
+# * Just xml to json:
+# python3 xml2json.py file.xml
+
import xmltodict
import json
import sys
try:
file = sys.argv[1]
except:
- print("Usage: " + sys.argv[0] + " <diameter xml file>")
+ print("Usage: " + sys.argv[0] + " <diameter xml file> [parent name (i.e.: servicesJson, diameterJson), none by default]\n")
+ print(" Converts Anna-Diameter XML files to JSON format.")
+ print(" Useful to build json content for ADML REST API:\n")
+ print(" - Services:")
+ print(" python3 xml2json.py services.xml servicesJson\n")
+ print(" - Diameter messages:")
+ print(" python3 xml2json.py CCR.xml diameterJson\n")
+ print(" - Direct xml into json format:")
+ print(" python3 xml2json.py file.xml")
sys.exit(1)
try:
print("ERROR reading '" + file + "'")
sys.exit(1)
+parent = None
+try:
+ parent = sys.argv[2]
+except:
+ pass
+
# although default attribute prefix is '@', anyway we will
# force the value just in case xmltodict implementation
# changes. The anna::core::functions::json2xml helper,
# assumes this prefix in order to work properly.
-my_dict=xmltodict.parse(xml, attr_prefix='@')
-json_data=json.dumps(my_dict, indent=3, sort_keys=True)
-print(json_data)
+result=xmltodict.parse(xml, force_list={'avp'}, attr_prefix='@')
+
+if parent:
+ result = { parent: result }
+
+print (json.dumps(result, indent=3, sort_keys=True))