Петля читает только 1 строку файла

Я пытаюсь преобразовать JSON-файл в XML, используя небольшой скрипт python, но по какой-то причине цикл, кажется, только читает первую строку файла JSON.

from xml.dom import minidom
from json import JSONDecoder
import json
import sys
import csv
import os
import re
import dicttoxml
from datetime import datetime, timedelta
from functools import partial
reload(sys)
sys.setdefaultencoding('utf-8')

nav = 'navigation_items.bson.json'
df = 'testxmloutput.txt'

def json2xml(json_obj, line_padding=""):
result_list = list()

json_obj_type = type(json_obj)

if json_obj_type is list:
    for sub_elem in json_obj:
        result_list.append(json2xml(sub_elem, line_padding))

    return "
".join(result_list)

if json_obj_type is dict:
    for tag_name in json_obj:
        sub_obj = json_obj[tag_name]
        result_list.append("%s<%s>" % (line_padding, tag_name))
        result_list.append(json2xml(sub_obj, "	" + line_padding))
        result_list.append("%s</%s>" % (line_padding, tag_name))

    return "
".join(result_list)

return "%s%s" % (line_padding, json_obj)

def json_parse(fileobj, decoder=JSONDecoder(), buffersize=2048):
buffer = ''
for chunk in iter(partial(fileobj.read, buffersize), ''):
     buffer += chunk
     while buffer:
         try:
             result, index = decoder.raw_decode(buffer)
             yield result
             buffer = buffer[index:]
         except ValueError:
             # Not enough data to decode, read more
             break

def (данные):

f = open(df,'w')
data = open(nav)
for line in json_parse(data):
    f.write(dicttoxml.dicttoxml(line, attr_type=False))

f.close()

converter(nav)

Я был в предположении, что он будет читать первую строку в памяти и переходить к следующему. Преобразованный вывод выглядит великолепно, но я тоже уверен, где искать, как заставить его перейти к следующей строке в файле.

python,json,xml,loops,

0

Ответов: 1


0 принят

Попробуйте json.load загрузить файл в dict, а затем итерации dict для вашего вывода.

import sys
import json

json_file = sys.argv[1]
data = {}
with open(json_file) as data_file:    
    data = json.load(data_file)

for key in data:
    #do your things
питон, JSON, XML, петли,
Похожие вопросы