Я получаю некоторые данные из файла JSON "new.json" и хочу отфильтровать некоторые данные и сохранить их в новом файле JSON. Вот мой код:
import json
with open('new.json') as infile:
data = json.load(infile)
for item in data:
iden = item.get["id"]
a = item.get["a"]
b = item.get["b"]
c = item.get["c"]
if c == 'XYZ' or "XYZ" in data["text"]:
filename = 'abc.json'
try:
outfile = open(filename,'ab')
except:
outfile = open(filename,'wb')
obj_json={}
obj_json["ID"] = iden
obj_json["VAL_A"] = a
obj_json["VAL_B"] = b
и я получаю сообщение об ошибке:
File "rtfav.py", line 3, in <module>
data = json.load(infile)
File "/usr/lib64/python2.7/json/__init__.py", line 278, in load
**kw)
File "/usr/lib64/python2.7/json/__init__.py", line 326, in loads
return _default_decoder.decode(s)
File "/usr/lib64/python2.7/json/decoder.py", line 369, in decode
raise ValueError(errmsg("Extra data", s, end, len(s)))
ValueError: Extra data: line 88 column 2 - line 50607 column 2 (char 3077 - 1868399)
Кто-нибудь может мне помочь?
Вот пример данных в new.json, в файле еще около 1500 таких словарей
{
"contributors": null,
"truncated": false,
"text": "@HomeShop18 #DreamJob to professional rafter",
"in_reply_to_status_id": null,
"id": 421584490452893696,
"favorite_count": 0,
"source": "<a href=\"https://mobile.twitter.com\" rel=\"nofollow\">Mobile Web (M2)</a>",
"retweeted": false,
"coordinates": null,
"entities": {
"symbols": [],
"user_mentions": [
{
"id": 183093247,
"indices": [
0,
11
],
"id_str": "183093247",
"screen_name": "HomeShop18",
"name": "HomeShop18"
}
],
"hashtags": [
{
"indices": [
12,
21
],
"text": "DreamJob"
}
],
"urls": []
},
"in_reply_to_screen_name": "HomeShop18",
"id_str": "421584490452893696",
"retweet_count": 0,
"in_reply_to_user_id": 183093247,
"favorited": false,
"user": {
"follow_request_sent": null,
"profile_use_background_image": true,
"default_profile_image": false,
"id": 2254546045,
"verified": false,
"profile_image_url_https": "https://pbs.twimg.com/profile_images/413952088880594944/rcdr59OY_normal.jpeg",
"profile_sidebar_fill_color": "171106",
"profile_text_color": "8A7302",
"followers_count": 87,
"profile_sidebar_border_color": "BCB302",
"id_str": "2254546045",
"profile_background_color": "0F0A02",
"listed_count": 1,
"profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
"utc_offset": null,
"statuses_count": 9793,
"description": "Rafter. Rafting is what I do. Me aur mera Tablet. Technocrat of Future",
"friends_count": 231,
"location": "",
"profile_link_color": "473623",
"profile_image_url": "http://pbs.twimg.com/profile_images/413952088880594944/rcdr59OY_normal.jpeg",
"following": null,
"geo_enabled": false,
"profile_banner_url": "https://pbs.twimg.com/profile_banners/2254546045/1388065343",
"profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
"name": "Jayy",
"lang": "en",
"profile_background_tile": false,
"favourites_count": 41,
"screen_name": "JzayyPsingh",
"notifications": null,
"url": null,
"created_at": "Fri Dec 20 05:46:00 +0000 2013",
"contributors_enabled": false,
"time_zone": null,
"protected": false,
"default_profile": false,
"is_translator": false
},
"geo": null,
"in_reply_to_user_id_str": "183093247",
"lang": "en",
"created_at": "Fri Jan 10 10:09:09 +0000 2014",
"filter_level": "medium",
"in_reply_to_status_id_str": null,
"place": null
}
more than one object per line
Ответы:
Как вы можете видеть в следующем примере,
json.loads
(иjson.load
) не декодирует несколько объектов json.Если вы хотите сбросить несколько словарей, поместите их в список, создайте дамп списка (вместо нескольких словарей)
источник
new.json
содержит json и другие избыточные данные.json.load
,json.loads
может только декодировать JSON. Это вызывает,ValueError
когда он сталкивается с дополнительными данными, как вы видите.new.json
, просто поместите один JSON в файл.Вы можете просто читать из файла
jsonifying
каждую строку, как вы идете:Это позволяет избежать хранения промежуточных объектов Python. Пока вы пишете один полный твит на
append()
звонок, это должно работать.источник
Я столкнулся с этим, потому что я пытался загрузить файл JSON, выгруженный из MongoDB. Это давало мне ошибку
JSON-файл MongoDB содержит по одному объекту на строку, поэтому у меня получилось:
источник
Это также может произойти, если ваш файл JSON не является только одной записью JSON. Запись в формате JSON выглядит следующим образом:
Он открывается и закрывается скобкой [], внутри скобок находятся скобки {}. Может быть много пар скобок, но все заканчивается закрывающей скобкой]. Если ваш файл JSON содержит более одного из них:
тогда load () не удастся.
Я подтвердил это своим собственным файлом, который не удался.
Это работает, потому что 1_ghest.json имеет одну запись []. Исходный файл, который я использовал all_ghest.json, содержал 6 записей, разделенных новой строкой. Я удалил 5 записей (которые я уже проверил, чтобы они были заключены в квадратные скобки) и сохранил файл под новым именем. Тогда оператор загрузки работал.
Ошибка была
PS. Я использую слово «запись», но это не официальное название. Кроме того, если в вашем файле есть символы новой строки, такие как мой, вы можете циклически проходить по нему, чтобы загружать () по одной записи за раз в переменную json.
источник
json.loads
прочитать разделители json с разделителями? То есть вести себя как[json.loads(x) for x in text.split('\n')]
? Связанный: есть ли гарантия, чтоjson.dumps
не будут включать буквальные переводы строк в свой вывод с отступом по умолчанию?json.dumps
изменит переводы строки в текстовом содержимом на"\n"
, сохраняя ваш json одной строкой.Ну, это может кому-то помочь. я только что получил ту же ошибку, в то время как мой файл JSON, как это
и я обнаружил, что это неправильно, поэтому я изменил
источник
Однострочник для вашей проблемы:
источник
Если вы хотите решить это в два слоя, вы можете сделать это так:
источник
Я думаю, что сохранение диктовок в списке не является идеальным решением, предложенным @falsetru.
Лучший способ - перебирать диктовки и сохранять их в .json, добавляя новую строку.
наши 2 словаря
Вы можете написать их в .json
и вы можете прочитать файл JSON без проблем
просто и эффективно
источник