Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa Adakah `json.loads()` Membuang 'JSONDecodeError: Nilai Jangkaan' dan Bagaimana Saya Boleh Membetulkannya?

Mengapa Adakah `json.loads()` Membuang 'JSONDecodeError: Nilai Jangkaan' dan Bagaimana Saya Boleh Membetulkannya?

Patricia Arquette
Patricia Arquetteasal
2024-12-08 06:02:10599semak imbas

Why Does `json.loads()` Throw a

JSONDecodeError: Expecting Value in Python

Apabila cuba menghuraikan JSON menggunakan fungsi json.loads(), mesej ralat seperti "Expecting value: baris 1 lajur 1 (char 0)" boleh timbul. Ralat ini menunjukkan bahawa rentetan input yang diberikan tidak mematuhi format JSON yang dijangkakan.

Menyelesaikan Isu

Punca paling biasa ralat ini ialah badan tindak balas yang kosong atau tidak lengkap. Untuk menyelesaikannya, pastikan langkah berikut dipatuhi:

  1. Sahkan bahawa panggilan API menghasilkan respons yang tidak kosong. Kod status respons HTTP dalam julat 200 harus dikembalikan.
  2. Nyahkod badan respons menggunakan pengekodan UTF-8 dan bukannya Unicode. Fungsi json.loads() boleh mengendalikan data yang dikodkan UTF-8 secara langsung.
  3. Pertimbangkan untuk menggunakan perpustakaan alternatif seperti permintaan atau httpx, yang menyediakan lebih banyak API mesra pengguna dan sokongan JSON terbina dalam.

Berikut ialah contoh menggunakan Permintaan pakej:

import requests

response = requests.get(url)
if response.status_code != 204:
    return response.json()

Untuk melindungi daripada pelanggaran piawaian HTTP, semak pengepala Jenis Kandungan untuk mengesahkan bahawa pelayan bertujuan untuk menghantar JSON. Jika ValueError berlaku semasa menghuraikan JSON, pengendalian ralat yang sesuai boleh dilaksanakan:

if (
    response.status_code != 204 and
    response.headers["content-type"].strip().startswith("application/json")
):
    try:
        return response.json()
    except ValueError:
        # Handle server misbehavior

Atas ialah kandungan terperinci Mengapa Adakah `json.loads()` Membuang 'JSONDecodeError: Nilai Jangkaan' dan Bagaimana Saya Boleh Membetulkannya?. 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