如何将此json格式转换为可用于pandas read_json()的正确格式

2024-10-01 02:27:52 发布

您现在位置:Python中文网/ 问答频道 /正文

这是第一次使用stackoverflow来提问。我的英语很差,所以如果我在单词上不小心弄错了,请不要介意。在

我有一个json文件(访问.json),格式如下:

[
{u'IP': u'aaaa1', u'Domain': u'bbbb1', u'Time': u'cccc1', ..... },
{u'IP': u'aaaa2', u'Domain': u'bbbb2', u'Time': u'cccc2', ..... },
{u'IP': u'aaaa3', u'Domain': u'bbbb3', u'Time': u'cccc3', ..... },
{u'IP': u'aaaa4', u'Domain': u'bbbb4', u'Time': u'cccc4', ..... },
{ ....... }, 
{ ....... } 
]

当我使用:

^{pr2}$

它返回:

ValueError: Expected object or value

这就是我想要的结果:

[out]
       IP    Domain     Time    ...
0   aaaa1     bbbb1    cccc1    ...
1   aaaa2     bbbb2    cccc2    ...
2   aaaa3     bbbb3    cccc3    ...
3   aaaa4     bbbb4    cccc4    ...
...and so on

我该如何实现这个目标?谢谢你的回答!在


Tags: ipjsontimedomainbbbb3aaaa1aaaa2aaaa3
3条回答

你也可以使用

pd.read_json("{json_file_name}", orient='records')

假设JSON数据是列表格式,如问题所示。在

它不是JSON格式。这是一个字典列表。可以使用^{}从文件中获取实际列表并将其传递给^{}构造函数:

from ast import literal_eval
import pandas as pd

with open('./access.log2.json') as f:
    data = literal_eval(f.read())

df = pd.DataFrame(data)
print df

您提供的示例数据的输出:

^{pr2}$

这不是有效的json,这就是read_json不解析它的原因。在

{u'IP': u'aaaa1', u'Domain': u'bbbb1', u'Time': u'cccc1', ..... },

应该是

^{pr2}$

您可以使用正则表达式将整个文件(整个文件)粉碎,以找到这些内容,例如:

In [11]: line
Out[11]: "{u'IP': u'aaaa1', u'Domain': u'bbbb1', u'Time': u'cccc1'},"

In [12]: re.sub("(?<=[\{ ,])u'|'(?=[:,\}])", '"', line)
Out[12]: '{"IP": "aaaa1", "Domain": "bbbb1", "Time": "cccc1"},'

注意:这会被一些字符串绊倒,因此请小心使用。

更好的“解决方案”是首先确保您拥有有效的json。。。看起来这是来自python的str/unicode/repr,而不是json.dumps。在

注意:json.dumps生成有效的json,因此可以由read_json读取。

In [21]: repr({u'IP': u'aaa'})
Out[21]: "{u'IP': u'aaa'}"

In [22]: json.dumps({u'IP': u'aaa'})
Out[22]: '{"IP": "aaa"}'

如果是别人创造了这个“json”,那就抱怨吧!不是json。在

相关问题 更多 >