Saya mendapatkan beberapa data dari file JSON "new.json", dan saya ingin memfilter beberapa data dan menyimpannya ke file JSON baru. Ini kode saya:
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
dan saya mendapatkan kesalahan, traceback adalah:
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)
Adakah yang bisa membantu saya?
Berikut adalah contoh data di new.json, ada sekitar 1500 lebih kamus seperti itu di file
{
"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
Jawaban:
Seperti yang Anda lihat pada contoh berikut,
json.loads
(danjson.load
) tidak mendekode beberapa objek json.Jika Anda ingin membuang beberapa kamus, bungkus dalam daftar, buang daftar (alih-alih membuang kamus beberapa kali)
sumber
new.json
berisi json dan data lain yang berlebihan.json.load
,json.loads
hanya dapat memecahkan kode json. Itu meningkatkanValueError
ketika menemukan data tambahan seperti yang Anda lihat.new.json
, cukup masukkan satu json di file.Anda bisa membaca dari sebuah file,
jsonifying
setiap baris sambil berjalan:Ini menghindari menyimpan objek python perantara. Selama Anda menulis satu tweet penuh per
append()
panggilan, ini akan berfungsi.sumber
Saya menemukan ini karena saya mencoba memuat file JSON yang dibuang dari MongoDB. Itu memberi saya kesalahan
Dump MongoDB JSON memiliki satu objek per baris, jadi yang berhasil bagi saya adalah:
sumber
Ini juga dapat terjadi jika file JSON Anda bukan hanya 1 catatan JSON. Catatan JSON terlihat seperti ini:
Ini membuka dan menutup dengan braket [], di dalam kurung ada kurung {}. Mungkin ada banyak pasang kawat gigi, tetapi semuanya berakhir dengan braket yang dekat]. Jika file json Anda mengandung lebih dari satu di antaranya:
lalu memuat () akan gagal.
Saya memverifikasi ini dengan file saya sendiri yang gagal.
Ini berfungsi karena 1_guests.json memiliki satu catatan []. File asli yang saya gunakan all_guests.json memiliki 6 catatan yang dipisahkan oleh baris baru. Saya menghapus 5 catatan, (yang sudah saya periksa untuk disimpan dengan tanda kurung) dan menyimpan file dengan nama baru. Kemudian pernyataan beban bekerja.
Kesalahan tadinya
PS. Saya menggunakan catatan kata, tapi itu bukan nama resmi. Selain itu, jika file Anda memiliki karakter baris baru seperti milik saya, Anda dapat memutarnya untuk memuat () satu catatan sekaligus ke dalam variabel json.
sumber
json.loads
membaca json chunks dibatasi-baris baru? Yaitu, untuk bertindak seperti[json.loads(x) for x in text.split('\n')]
? Terkait: Apakah ada jaminan yangjson.dumps
tidak akan menyertakan baris baru literal dalam outputnya dengan indentasi default?json.dumps
akan mengubah baris baru dalam konten teks ke"\n"
, menjaga json Anda ke satu baris.Yah, itu mungkin membantu seseorang. saya baru saja mendapatkan kesalahan yang sama ketika file json saya seperti ini
dan saya menemukan itu cacat, jadi saya mengubahnya menjadi sesuatu dari
sumber
Satu-liner untuk masalah Anda:
sumber
Jika Anda ingin menyelesaikannya dalam dua baris, Anda dapat melakukannya seperti ini:
sumber
Saya pikir menyimpan dikte dalam daftar bukan solusi ideal di sini yang diusulkan oleh @ falsetru.
Cara yang lebih baik adalah, beralih melalui dikte dan menyimpannya ke .json dengan menambahkan baris baru.
2 kamus kami adalah
Anda dapat menulisnya ke .json
dan Anda dapat membaca file json tanpa masalah
sederhana dan efisien
sumber