작은 파이썬 스크립트를 사용하여 JSON 파일을 XML로 변환하려고하지만 어떤 이유로 루프가 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 "\n".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, "\t" + line_padding))
result_list.append("%s</%s>" % (line_padding, tag_name))
return "\n".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
데프 컨버터 (데이터) :
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)
나는 ITER가 메모리에 첫 번째 줄을 읽고 다음에 이동 것이라는 가정하에 있었다. 변환 된 출력은 멋지지만, 파일에서 다음 줄로 반복 처리하는 방법을 어디서 볼 것인지 확실하지 않습니다.
iter 줄 바꿈을 삭제하면 어떻게됩니까? –
동일한 작업을 수행합니다. 내가 어떻게 든 루핑 액션의 어떤 수준을 부정하고 있는지 궁금해. – hscorpio15201
'json_parse() '란 무엇입니까? 표준 라이브러리에있는 것으로 보이지 않습니다. – martineau