我正在尝试使用python扁平化JSON,但是许多JSON文件具有多个对象,因此,python脚本无法对其进行扁平化。
例如:
{........
} {
......
}
有3000个文件,这是一个问题,我什至不能手动将[]括号放在列表中,请问如何扁平化这些JSON文件?
我正在使用的当前代码:
import json
import pandas as pd
from pandas.io.json import json_normalize
import glob
import os
import csv
import xlsxwriter
counter=0
counter1=0
writer = pd.ExcelWriter('......', engine = 'xlsxwriter')
path = '/Users/.......''
dataframeLS = []
for subfolder in os.listdir(path):
for filename in glob.glob(os.path.join (path+subfolder, '*.json')):
with open(filename) as f:
try:
data = json.load(f)
dataframeLS.append(data)
counter1=counter1+1
except:
counter=counter+1
pass
A = pd.io.json.json_normalize(dataframeLS, errors = 'ignore')
A.to_excel(writer, sheet_name = 'Sheet1')
writer.save()
print(counter) # number of files with error
print(counter1) # number of flattened files successfully
答案 0 :(得分:0)
因此示例文件看起来像这样吗?
{
"temp":1
}
{
"temp":2
}
要将其导入python,您可以先以文本形式读取文件,然后修复语法错误。如果使用正则表达式,甚至可以处理不规则的空格。
正则表达式如下:
}[^,]*{
}
与结尾}
匹配[^,]
匹配除,
以外的任何字符[^,]*
匹配除,
以外的尽可能多的字符{
与开头{
这一起匹配了一对括号,中间没有逗号。 您可以使用正则表达式用格式正确的文本替换此文本:
import json
import re
file = open("bad_json.json", "r")
text = file.read()
file.close()
text # '{\ntemp:1\n}\n{\ntemp:2\n}'
# we convert it to an array
# add outer brackets
text = "["+text+"]"
# use the regex to replace bad formatting
pattern = re.compile(r"}[^,]*{")
new_text = re.sub(pattern,"},{", text)
data = json.loads(new_text)