如何解码JSON中的值是分开的行

2024-10-03 06:20:52 发布

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

我有这个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']

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


Tags: logtargettimeporttypexpplayerpowerup
3条回答

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

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

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']))

相关问题 更多 >