JSON в файл XML с использованием Python

Я пытаюсь преобразовать один большой файл JSON в файл XML. Ниже приведены две строки, которые я вынул из большого JSON. Я пытаюсь создать корневой узел для каждого INVENTORY_SEQ_ID, присутствующего в этом файле:

[{"INVENTORY_SEQ_ID":4577494,"GROUP_NBR":8605548,"SEQ_NBR":300,"FACILITY_CODE":"OCALADC","COMPANY_CODE":"AMES"},
{"INVENTORY_SEQ_ID":4577495,"GROUP_NBR":8605548,"SEQ_NBR":301,"FACILITY_CODE":"OCALADC","COMPANY_CODE":"AMES"}]

Я написал ниже код (я просто новичок в этой области), и он работает, если в файле JSON есть только одна строка. Выдает ошибку, если их больше.

import json as j
with open("invdata.json") as input_var:
 d=j.load(input_var)
import xml.etree.cElementTree as e
r=e.Element("InvHead")
e.SubElement(r,"INVENTORY_SEQ_ID").text = str(d["INVENTORY_SEQ_ID"])
e.SubElement(r,"GROUP_NBR").text = str(d["GROUP_NBR"])
e.SubElement(r,"SEQ_NBR").text = str(d["SEQ_NBR"])
e.SubElement(r,"FACILITY_CODE").text = d["FACILITY_CODE"]
e.SubElement(r,"COMPANY_CODE").text = d["COMPANY_CODE"]
a=e.ElementTree(r)
a.write("output.xml")

Любая помощь приветствуется.

Спасибо АНмол


person Anmol    schedule 15.04.2020    source источник
comment
Отвечает ли это на ваш вопрос? Преобразование JSON в XML в Python   -  person log0    schedule 15.04.2020


Ответы (2)


Когда есть только один объект, json.load возвращает словарь, тогда как для нескольких записей он возвращает список словарей. Таким образом, вы можете заставить свой код работать, если замените d["INVENTORY_SEQ_ID"] на d[i]["INVENTORY_SEQ_ID"], где i перебирает все ваши объекты.

Вместо этого вы можете попробовать этот более простой подход

from json import load,loads
from dicttoxml import dicttoxml

with open("invdata.json") as input_var:
 d=load(input_var)
di = {"InvHead":d}
xm = dicttoxml(di)     #returns xm as <class 'bytes'> object

with open("output.xml", mode='wb') as out:  #opening in write-bytes mode 
    out.write(xm)

И выходной XML-код output.xml

Дайте мне знать, если это сработает в вашем случае.
Рекомендуемая розничная цена

person Rahul Purohit    schedule 15.04.2020
comment
Спасибо работают хорошо. - person Gs.; 21.01.2021

from json import load
from dicttoxml import dicttoxml
...
xml = dicttoxml(load(input_var))

затем сохраните xml в файл

person log0    schedule 15.04.2020