我有一个巨大的文本文件,其中包含几个JSON对象,我希望将其解析为csv文件。仅仅因为我在处理别人的数据,我就不能真正改变它的交付格式。
因为我不知道有多少对象JSON对象,所以我只能创建几个字典,将它们包装在一个列表中,然后对列表执行json.loads()
操作。
此外,由于所有对象都在单个文本行中,我不能使用正则表达式来分隔每个单独的json对象,然后将它们放在一个列表中(这是一个超级复杂的json,有时甚至是三重嵌套的json。
下面是我当前的代码
def json_to_csv(text_file_name,desired_csv_name):
#Cleans up a bit of the text file
file = fileinput.FileInput(text_file_name, inplace=True)
ile = fileinput.FileInput(text_file_name, inplace=True)
for line in file:
sys.stdout.write(line.replace(u'\'', u'"'))
for line in ile:
sys.stdout.write(re.sub(r'("[\s\w]*)"([\s\w]*")', r"\1\2", line))
#try to load the text file to content var
with open(text_file_name, "rb") as fin:
content = json.load(fin)
#Rest of the logic using the json data in content
#that uses it for the desired csv format
这段代码给出了一个ValueError: Extra data: line 1 column 159816
,因为那里有多个对象。
我在谷歌和StackOverflow上看到了类似的问题。但这些解决方案都没有,因为这只是一个文本文件中的一行很长的代码,我不知道文件中有多少个对象。
发布于 2018-06-14 07:08:29
如果你想拆分最高级别的花括号,你可以这样做
string = '{"NextToken": {"value": "...'
objects = eval("[" + string + "]")
然后解析列表中的每一项。
https://stackoverflow.com/questions/50847058
复制相似问题