在python中读取包含json对象流的文件

在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

这可能是多余的,但在阅读了以前的文章和答案后,我仍然没有让我的代码正常工作。我有一个非常大的文件,其中包含多个不由任何值分隔的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中打开/解析文件以创建数据帧

我尝试了以下格式:

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加载数据。你可以提出其他问题,这些评论不适合。