我有一个相当大的日志数据json文件,我试图转换为XLS或CSV。 这个过程中的某些东西只占用了前1000行,我无法弄清楚可能导致这种情况的原因。
import json
import pprint
import pandas as pd
from pandas.io.json import json_normalize
f = open('GetLog.json', 'r')
writer = pd.ExcelWriter('output.xlsx')
payload = json.load(f)
df = json_normalize(payload, 'Result')
f.close()
pprint.pprint(df)
df.to_excel(writer,'Log Output')
writer.save()
writer.close()
略微清理过的json摘录如下所示,但我只能说我只对结果感兴趣,因为消息的有效负载通常是空的。
{"登录" {"消息":[]},"结果":[{" LOGDATE":&#34 ; /日期(1468270785461)/""消息":" ERRORTEXT""日志类型":0,"模块&#34 ;: " WatchFolder"" logdateStr":" 2016年7月12日 06:59:45.461"},{" LOGDATE":" /日期(1468270785430)/""消息":" ERRORTEXT& #34;"日志类型":0,"模块":" WatchFolder"" logdateStr":" 2016/07 / 12 06:59:45.430"},{" LOGDATE":" /日期(1468270785398)/""消息":" ERRORTEXT& #34;"日志类型":0,"模块":" WatchFolder"" logdateStr":" 2016/07 / 12 06:59:45.398"},{" LOGDATE":" /日期(1468270785367)/""消息":" ERRORTEXT& #34;"日志类型":0,"模块":" WatchFolder"" logdateStr":" 2016/07 / 12 06:59:45.367"},{" LOGDATE":" /日期(1468270785336)/""消息":" ERRORTEXT& #34;"日志类型":0,"模块":" WatchFolder"" logdateStr":" 2016/07 / 12 06:59:45.336"},{" LOGDATE":" /日期(1468270785227)/""消息":" ERRORTEXT& #34;"日志类型":0,"模块":" WatchFolder"" logdateStr":" 2016/07 / 12 06:59:45.227"},{" LOGDATE":" /日期(1468270785196)/""消息":" ERRORTEXT& #34;"日志类型":0,"模块":" WatchFolder"" logdateStr":" 2016/07 / 12 06:59:45.196"},{" LOGDATE":" /日期(1468270785164)/""消息":" ERRORTEXT& #34;"日志类型":0,"模块":" WatchFolder"" logdateStr":" 2016/07 / 12 06:59:45.164"}],"成功":真," TOTALCOUNT":5648}
尝试本地导入到pandas中会直接失败并出现错误:' ValueError:将dicts与非系列混合可能会导致模糊排序。'
最终,这是一个脚本,我只想指向远程系统上的Web服务,每天提取一次或两次一小时的日志
答案 0 :(得分:0)
解决了 - 最后使用ijson加载json文件,只加载我想要的结果值。 示例代码在这里:
import csv
import ijson
import pprint
import pandas as pd
from pandas.io.json import json_normalize
#print flattenjson(x)
#pprint.pprint
f = open('GetLog.json', 'r')
writer = pd.ExcelWriter('output.xlsx')
df = pd.DataFrame()
for item in ijson.items(f, 'Result'):
df1 = pd.DataFrame(item)
if df.empty:
df = df1
else:
df.append(df1, ignore_index=True)
f.close()
df.to_excel(writer,'Log Output')
writer.save()
writer.close()
实时版本从具有一些参数的服务器获取json以指定日期范围。