这可能是多余的,但是在阅读了以前的文章和答案之后,我仍然没有得到我的代码。我有一个非常大的文件,其中包含多个不受任何值限制的json对象:
{“ _ index”:“ 1234”,“ _type”:“ 11”,“ _id”:“ 1234”,“ _score”:0.0,“ fields”:{“ c_u”:[“ url.com”] ,“ tawgs.id”:[“ p6427”]}} {“ _ index”:“ 1234”,“ _type”:“ 11”,“ _id”:“ 786fd4ad2415aa7b”,“ _score”:0.0,“ fields”:{ “ c_u”:[“ url2.com”],“ tawgs.id”:[“ p12519”]}} {“ _ index”:“ 1234”,“ _type”:“ 11”,“ _id”:“ 5826e7cbd92d951a”, “ _score”:0.0,“ fields”:{“ tawgs.id”:[“ p8453”,“ p8458”]}}
我已经读到了这正是JSON-RPC的样子,但是仍然无法实现打开/解析文件以在python中创建数据框的功能。
我尝试了以下格式:
i = 0
d = json.JSONDecoder()
while True:
try:
obj, i = d.raw_decode(s, i)
except ValueError:
return
yield obj
但是没有用。
我也尝试了一个基本的方法:
with open('output.json','r') as f:
data = json.load(f)
但抛出错误:
JSONDecodeError:额外数据:第1行第184列(字符183)
尝试带附加的json.decode()也不起作用,并且返回的数据为空[]
data = []
with open('es-output.json', 'r') as f:
for line in f:
try:
data.append(json.loads(line))
except json.decoder.JSONDecodeError:
pass # skip this line
请帮助!预先感谢
答案 0 :(得分:0)
问题出在数据本身! 在此数据中,您使用3个值,但没有键。
第一个是:
{"_index".... ["p6427"]}}
第二个是:
{"_index".... ["p12519"]}}
第三个是:
{"_index".... ["p8458"]}}
您希望对每个值都影响一个键,例如:
{
"k1":{"_index": "1234", "_type": "11", "_id": "1234", "_score": 0.0, "fields": {"c_u": ["url.com"], "tawgs.id": ["p6427"]}},
"k2":{"_index": "1234", "_type": "11", "_id": "786fd4ad2415aa7b", "_score": 0.0, "fields": {"c_u": ["url2.com"], "tawgs.id": ["p12519"]}},
"k3":{"_index": "11_20190714_184325_01", "_type": "11", "_id": "5826e7cbd92d951a", "_score": 0.0, "fields": {"tawgs.id": ["p8453", "p8458"]}}
}
通过这种方式,一切都会正常运行,并且数据将被很好地加载。
答案 1 :(得分:0)
这将尝试迭代解码s
内部的JSON流:
s = '''{"_index": "1234", "_type": "11", "_id": "1234", "_score": 0.0, "fields": {"c_u": ["url.com"], "tawgs.id": ["p6427"]}}{"_index": "1234", "_type": "11", "_id": "786fd4ad2415aa7b", "_score": 0.0, "fields": {"c_u": ["url2.com"], "tawgs.id": ["p12519"]}}{"_index": "1234", "_type": "11", "_id": "5826e7cbd92d951a", "_score": 0.0, "fields": {"tawgs.id": ["p8453", "p8458"]}}'''
import json
d = json.JSONDecoder()
idx = 0
while True:
if idx >= len(s):
break
data, i = d.raw_decode(s[idx:])
idx += i
print(data)
print('*' * 80)
打印:
{'_index': '1234', '_type': '11', '_id': '1234', '_score': 0.0, 'fields': {'c_u': ['url.com'], 'tawgs.id': ['p6427']}}
********************************************************************************
{'_index': '1234', '_type': '11', '_id': '786fd4ad2415aa7b', '_score': 0.0, 'fields': {'c_u': ['url2.com'], 'tawgs.id': ['p12519']}}
********************************************************************************
{'_index': '1234', '_type': '11', '_id': '5826e7cbd92d951a', '_score': 0.0, 'fields': {'tawgs.id': ['p8453', 'p8458']}}
********************************************************************************