Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在值以行分隔的情况下解码JSON_Python_Json_Python 3.x - Fatal编程技术网

Python 如何在值以行分隔的情况下解码JSON

Python 如何在值以行分隔的情况下解码JSON,python,json,python-3.x,Python,Json,Python 3.x,我有这个JSON编码的文本: {"port":27277,"velocityX":-0.4,"time":199888,"powerup":"Wall","player":0,"positionX":2331,"velocityY":4.2,"positionY":1130,"type":"powerupUse"} {"port":27277,"velocityX":0,"time":199921,"powerup":"Homing Missile","player":0,"positionX"

我有这个JSON编码的文本:

{"port":27277,"velocityX":-0.4,"time":199888,"powerup":"Wall","player":0,"positionX":2331,"velocityY":4.2,"positionY":1130,"type":"powerupUse"}
{"port":27277,"velocityX":0,"time":199921,"powerup":"Homing Missile","player":0,"positionX":2319,"velocityY":0,"positionY":1179,"type":"powerupPickup"}
{"port":27277,"time":200032,"type":"pingSummary","pingByPlayer":{"0":0}}
{"port":27277,"velocityX":0.37,"time":201784,"powerup":"Homing Missile","player":0,"positionX":2346.61,"velocityY":4.25,"positionY":1123.58,"type":"powerupUse"}
{"port":27277,"time":202623,"player":0,"target":"turret","xp":1,"type":"structureDamage","exactXp":1.8466638326644897}
{"port":27277,"time":202623,"player":0,"target":"turret","xp":10,"type":"structureDestroy"}
{"port":27277,"time":202936,"player":0,"target":"turret","xp":2,"type":"structureDamage","exactXp":2.9056427478790283}
{"port":27277,"time":203171,"player":0,"target":"turret","xp":4,"type":"structureDamage","exactXp":4.7512664794921875}
{"port":27277,"time":205034,"type":"pingSummary","pingByPlayer":{"0":0}}
我想用Python对其进行解码,并尝试了以下方法:

with open("log.txt") as log:
    data = log.read()
    jsondata = json.loads(data)
但我得到了这个错误:

json.decoder.JSONDecodeError: Extra data: line 2 column 1 (char 82)
我想像这样解析数据

['port']['time']['player']

有人能帮我吗,因为我很快就需要这个吗?

问题是文件中有更多的JSON,而不是只有一个。用“\n”分隔符拆分文本,然后为每一行调用json.loads。

问题是文件中有更多的json,而不是只有一个。使用“\n”分隔符拆分文本,然后为每行调用json.loads。

json.loads
加载单个json对象。在您的例子中,
log.txt
包含多个JSON对象,由
“\n”
分隔。您可以迭代文件中的行并调用
json。对每行加载

with open("log.txt") as log:
    jsondata = [json.loads(line) for line in log]

json.load
加载单个json对象。在您的例子中,
log.txt
包含多个JSON对象,由
“\n”
分隔。您可以迭代文件中的行并调用
json。对每行加载

with open("log.txt") as log:
    jsondata = [json.loads(line) for line in log]

我会这样做:

import json

jsondata = 0

with open("log.txt") as log_file:
    jsondata = [json.loads(line) for line in log_file]

for line in jsondata:
    if 'port' in line:
        print("Port: {}".format(line['port']))
    if 'time' in line:
        print("Time: {}".format(line['time']))
    if 'player' in line:
        print("Player: {}".format(line['player']))

我会这样做:

import json

jsondata = 0

with open("log.txt") as log_file:
    jsondata = [json.loads(line) for line in log_file]

for line in jsondata:
    if 'port' in line:
        print("Port: {}".format(line['port']))
    if 'time' in line:
        print("Time: {}".format(line['time']))
    if 'player' in line:
        print("Player: {}".format(line['player']))

在您的示例输入中,每一行都是一个有效的json文档,因此您应该在每一行上拆分输入并分别进行解析。在您的示例输入中,每一行都是一个有效的json文档,因此您应该在每一行上拆分输入并分别进行解析。您能否提供指向log.txt文件的链接,因为我刚刚复制了它并粘贴到txt文件中进行测试?也许文件格式不好,因为这在我的机器上运行得很好…当然,我发布的行只是文件中的一小部分!我研究了你的文件,我必须告诉你,你的JSON是无效的。去手动错误地检查错误,因为我试图对它进行编码,甚至在json.loads失败之后。你能提供指向你的log.txt文件的链接吗,因为我刚刚复制了它并粘贴到txt文件中进行测试?也许文件格式不好,因为这在我的机器上运行得很好…当然,我发布的行只是文件中的一小部分!我研究了你的文件,我必须告诉你,你的JSON是无效的。去手动错误地检查错误,因为我试图对它进行编码,甚至在json.loads失败之后。@StamKaly,如果您迭代一个文件对象(可以显式地使用
[…for line in log]
或隐式地使用
映射(json.loads,log)
,文件将被读取。迭代一个文件对象会逐行读取它,并产生每一行。@StamKaly,如果您迭代一个文件对象(显式使用
[…用于日志中的行]
或隐式使用
映射(json.loads,log)
,将读取文件。对文件对象进行迭代,逐行读取文件,并生成每一行。