首页 > 解决方案 > 解析 JSON - print 有效,但 append 无效

问题描述

我有一个包含一堆 JSON 对象的文件。我尝试逐个对象解析,试图获得id_str唯一的。当我打印时,它可以工作(每行一个 id_str)。但是,当我尝试将它附加到列表时,它给了我一个 KeyError id_str。所以我不确定为什么它在打印时有效,但在附加时无效。

import zipfile
id_list = []
with open("sample.json", "r") as zip:
  for i in zip:
    jobj = json.loads(i)
    print(jobj["id_str"]) # this prints each id (works)
    id_list.append(jobj["id_str"]) # same as above, but appends to list (KeyError id_str)

带有 JSON 对象的文件示例:

{
    "truncated": false,
    "contributors": null,
    "reply_count": 0,
    "retweeted": false,
    "in_reply_to_status_id_str": null,
    "source": "<a href=\"omitted_link" rel=\"nofollow\">Twitter for Android</a>",
    "in_reply_to_screen_name": null,
    "id": 1234272705391874048,
    "retweet_count": 0,
    "filter_level": "low",
    "id_str": "1234272705391874048",
    "in_reply_to_user_id": null,
    "in_reply_to_status_id": null,
    "lang": "tr",
    "favorited": false,
    "favorite_count": 0,
    "coordinates": null,
    "in_reply_to_user_id_str": null,
    "created_at": "Mon Mar 02 00:21:59 +0000 2020",
    "timestamp_ms": "1583108519300",
    "text": "\u00d6yle sevdim ki seni beni g\u00f6ren herkes yerinde olmak istedi.",
    "quote_count": 0,
    "geo": null,
    "is_quote_status": false
} 
{
    "truncated": true,
    "contributors": null,
    "reply_count": 0,
    "retweeted": false,
    "in_reply_to_status_id_str": null,
    "source": "<a href=\"omitted_link" rel=\"nofollow\">pywws</a>",
    "in_reply_to_screen_name": null,
    "id": 1234268093091926016,
    "retweet_count": 0,
    "filter_level": "low",
    "id_str": "1234268093091926016",
    "in_reply_to_status_id": null,
    "lang": "en",
    "favorited": false,
    "favorite_count": 0,
    "in_reply_to_user_id_str": null,
    "created_at": "Mon Mar 02 00:03:39 +0000 2020",
    "timestamp_ms": "1583107419642",
    "text": "Sunday 01 March 2020\n23:58 GMT\nTemperature: 1.6\u00b0C\nWind: S, 0 mph (ave), 5 mph (gust)\nHumidity: 95%\nRain (today): 0.\u2026 omitted_link",
    "in_reply_to_user_id": null,
    "quote_count": 0,
    "geo": {
        "type": "Point",
        "coordinates": [52.417, -1.442]
    },
    "is_quote_status": false
}

标签: pythonjson

解决方案


嘿@Knovolt我用re模块做了你在这里做的事情,并在你的样本上进行了测试,它有效,所以测试一下

import re

with open ('sample.json','r') as reader :
    Readed = reader.readlines()

for item in Readed :
    if re.findall('"id_str"',item) :
        with open ('IDS_YOU_WANTED.txt','a') as writer :
            writer.write(item)

推荐阅读