展平JSON文件中的多个对象

时间:2018-11-12 21:21:07

标签: python json flatten

我正在尝试使用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

1 个答案:

答案 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)