在python中读取包含json对象流的文件
这可能是多余的,但在阅读了以前的文章和答案后,我仍然没有让我的代码正常工作。我有一个非常大的文件,其中包含多个不由任何值分隔的json对象: “1234”,“u分数”:0.0,领域:场:0.0,领域:场:0.0,场:0.0,场:0.0,场:0.0,场:{“c u u u”:[url.com”,“tawgs.id”:“1234”,,,“u类型类型”:“11”,11,“11”,“u类型类型”:“11”,,“u id id id id id”11,”11,”,”11,“UID id id:“id id:“786666FD444AD4AD41414141414141414141414AD24157777AA241577777777777777777777777777777777777777777777777777777777,”,”,”,”,”得分得分,场,场,场,0,场,场,场,场,场,场92D951A“,“_分数”:0.0,“字段”:{“tawgs.id”:[“p8453”,“p8458”]} 我已经读到,这正是JSON-RPC应该看起来的样子,但仍然无法实现在python中打开/解析文件以创建数据帧 我尝试了以下格式:在python中读取包含json对象流的文件,python,json,python-3.x,Python,Json,Python 3.x,这可能是多余的,但在阅读了以前的文章和答案后,我仍然没有让我的代码正常工作。我有一个非常大的文件,其中包含多个不由任何值分隔的json对象: “1234”,“u分数”:0.0,领域:场:0.0,领域:场:0.0,场:0.0,场:0.0,场:0.0,场:{“c u u u”:[url.com”,“tawgs.id”:“1234”,,,“u类型类型”:“11”,11,“11”,“u类型类型”:“11”,,“u id id id id id”11,”11,”,”11,“UID id id:“id id
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)
使用append尝试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
请帮忙!提前感谢问题在于数据本身! 在此数据中,您使用3个值,但没有键 第一个是:
{"_index".... ["p6427"]}}
第二个是:
{"_index".... ["p12519"]}}
{"_index".... ["p8458"]}}
第三个是:
{"_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"]}}
}
通过这种方式,一切都将正常工作,数据也将正常加载。这将尝试以迭代方式解码
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']}}
********************************************************************************
可能的重复是无效的jsonhmm,我正在从elasticsearch py下拉我的数据,所以我不确定如何操作和引入键?还非常熟悉python和elasticsearch的集成:/尝试识别一些独特的字符来创建键!如果无法初始读取/打开包含数据的文件,我如何在json中创建键?因此,如果我的“s”值是一个json文件,而不是字符串对象,因为我使用了json.dump()来编写文件,那么我最初如何将我的文件转换为json字符串类型?当我尝试使用json.dumps()编写文件时,返回一个空的set@aesthetics只需在文件中加载JSON对象即可。
s
:s=open('your_file.txt','r')。read()
@我对elasticsearch没有任何经验,但您可能有一些包含JSON值的字符串,或者您需要从文件中加载此字符串。下一步,为了澄清,如果JSON类型是字符串,是否有办法将其展平以放入数据帧中?@这是Panda/Numpy专家的问题,但我打赌有一些方法可以直接从json加载数据。你可以提出其他问题,这些评论不适合。