#python #json #twitter
#python #json #Twitter
Вопрос:
У меня есть поврежденный файл JSON для публичного твита как такового:
"{"created_at":"Thu Feb 25 05:05:41 0000 2021","id":1364803731678715907,"id_str":"1364803731678715907","text":"\u201cMe solta crlh\u201d","source":"\u003ca href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":870120437132529664,"id_str":"870120437132529664","name":"vraulentina","screen_name":"florescabrall","location":"Dourados, Brasil","url":null,"description":"hmm, sei la","translator_type":"none","protected":false,"verified":false,"followers_count":336,"friends_count":339,"listed_count":0,"favourites_count":32475,"statuses_count":16889,"created_at":"Thu Jun 01 03:30:53 0000 2017","utc_offset":null,"time_zone":null,"geo_enabled":true,"lang":null,"contributors_enabled":false,"is_translator":false,"profile_background_color":"000000","profile_background_image_url":"http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_image_url_https":"https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_tile":false,"profile_link_color":"1B95E0","profile_sidebar_border_color":"000000","profile_sidebar_fill_color":"000000","profile_text_color":"000000","profile_use_background_image":false,"profile_image_url":"http:\/\/pbs.twimg.com\/profile_images\/1364803281785085954\/ITyuznjA_normal.jpg","profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/1364803281785085954\/ITyuznjA_normal.jpg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/870120437132529664\/1554819329","default_profile":false,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":{"id":"9ae7de89f4e0fcc0","url":"https:\/\/api.twitter.com\/1.1\/geo\/id\/9ae7de89f4e0fcc0.json","place_type":"city","name":"Dourados","full_name":"Dourados, Brasil","country_code":"BR","country":"Brasil","bounding_box":{"type":"Polygon","coordinates":[[[-55.521651,-22.441805],[-55.521651,-21.880052],[-54.201264,-21.880052],[-54.201264,-22.441805]]]},"attributes":{}},"contributors":null,"is_quote_status":false,"quote_count":0,"reply_count":0,"retweet_count":0,"favorite_count":0,"entities":{"hashtags":[],"urls":[],"user_mentions":[],"symbols":[]},"favorited":false,"retweeted":false,"filter_level":"low","lang":"pt","timestamp_ms":"1614229541116"}rn"
В конечном счете, я просто хочу, чтобы текст и координаты были предоставлены. Я использую StreamListener в своем коде для сбора твитов в виде файлов JSON и отправки их в расположение файла на моем компьютере. Файлы JSON собираются в режиме реального времени, но когда я их открываю, они выглядят так и не могут быть прочитаны или использованы для сопоставления. Может кто-нибудь, пожалуйста, дать некоторое представление о коде для сбора твитов в режиме реального времени в удобочитаемом формате или как исправить файлы JSON, которые я получаю? Спасибо.
Комментарии:
1. В этой записи JSON нет ничего поврежденного. Вставка этой строки в
json.loads()
работает просто отлично.
Ответ №1:
Если вы имеете в виду, что вы случайно сохранили repr()
файл JSON в файл, вы можете удалить repr()
его с помощью ast.literal_eval()
:
import ast
import json
file = ...
json_string = ast.literal_eval(file.read())
json_data = json.loads(json_string)
assert isinstance(json_data, dict)
Комментарии:
1. Я не уверен, что понимаю, что вы имеете в виду, как они могут быть более чистыми, если просто собраны без этого дополнительного шага?
2. Я не знаю, как вы собрали данные, но если то, что вы вставили в свой вопрос, — это то, что находится в вашем файле, вы записали
repr(some_json_string)
в файл, и для декодирования его в dict сначала требуется отменить копирование данных.3. Мой код написан с использованием StreamListener и отправляется в папку на моем компьютере. Знаете ли вы, если добавить этот repr(some_json_string) в код, он будет декодировать файлы, как вы указали?