Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa saya mendapat "ValueError: Data Tambahan" apabila menggunakan json.loads dalam Python?

Mengapa saya mendapat "ValueError: Data Tambahan" apabila menggunakan json.loads dalam Python?

Linda Hamilton
Linda Hamiltonasal
2024-11-17 18:11:01171semak imbas

Why am I getting a

Berurusan dengan "ValueError: Data tambahan" Apabila Menggunakan json.loads dalam Python

Penerangan Masalah

Apabila membaca data daripada fail JSON menggunakan json.load, anda mungkin menghadapi ralat "ValueError: Data tambahan". Ini menunjukkan bahawa terdapat kandungan tambahan dalam fail JSON melebihi data JSON yang sah.

Data Contoh

Berikut ialah sampel data dalam "baharu .json", yang menyebabkan ralat:

{
    "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
} 

Penyelesaian

Ralat berlaku kerana json.load cuba menghuraikan keseluruhan fail sebagai objek JSON tunggal . Walau bagaimanapun, fail itu mengandungi berbilang baris, setiap satu mewakili objek JSON yang berasingan.

Untuk menyelesaikan isu ini, ikut langkah berikut:

  1. Lelaran Baris demi Baris: Lelaran ke atas fail baris demi baris dan muatkan setiap baris sebagai JSON menggunakan json.loads.
tweets = []
with open('new.json') as infile:
    for line in infile:
        tweets.append(json.loads(line))
  1. Asingkan Objek JSON: Dengan melakukan ini, anda memisahkan dengan berkesan setiap objek JSON ke dalam elemen individu dalam senarai.

Dengan mengelakkan objek Python perantaraan dan memastikan hanya tweet lengkap dilampirkan, pendekatan ini menghalang memori yang berlebihan dan membolehkan anda memproses fail JSON yang besar dengan cekap.

Atas ialah kandungan terperinci Mengapa saya mendapat "ValueError: Data Tambahan" apabila menggunakan json.loads dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn