91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python錯誤JSONDecodeError:?Expecting?value:?line?1?column?1怎么解決

發布時間:2023-05-12 14:30:05 來源:億速云 閱讀:115 作者:iii 欄目:開發技術

這篇文章主要講解了“Python錯誤JSONDecodeError: Expecting value: line 1 column 1怎么解決”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Python錯誤JSONDecodeError: Expecting value: line 1 column 1怎么解決”吧!

Python“json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) ”發生在我們試圖解析一些無效的 JSON 時。

要解決該錯誤,請確保響應或文件不為空,或者在解析之前有條件地檢查內容類型。

嘗試解析空字符串會導致錯誤

這是一個非常簡單的示例,說明錯誤是如何發生的。

import json

# ?? json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
result = json.loads('')

Python錯誤JSONDecodeError:?Expecting?value:?line?1?column?1怎么解決

我們試圖將一個空字符串當作有效的 JSON 來解析。

錯誤的常見原因

最常見的錯誤原因是:

  • 嘗試解析無效的 JSON 值(例如單引號或尾隨逗號)。

  • 從遠程服務器(例如 204 或 404)獲取空響應并嘗試將其作為 JSON 進行解析。

  • 嘗試像解析 JSON 一樣解析具有不同內容類型(例如文本/html)的響應。

  • 嘗試錯誤地讀取 JSON 文件或嘗試解析空 JSON 文件的內容。

嘗試解析無效的 JSON 值

下面是一個存儲無效 JSON 的文件示例。

example.json

{
  "id": 1,
  'name': "Alice",
  "age": 30,
  "country": "Austria"
}

請注意 ,名稱屬性用單引號引起來。

這會使 JSON 無效,并且嘗試從文件中讀取會導致錯誤。

import json

file_name = 'example.json'

# ?? json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 3 column 3 (char 15)
with open(file_name, 'r', encoding='utf-8') as f:
    my_data = json.load(f)

    print(my_data)

要解決該錯誤,需要確保將 JSON 中的所有鍵和字符串值用雙引號引起來。

example.json

{
  "id": 1,
  "name": "Alice",
  "age": 30,
  "country": "Austria"
}

現在 name 鍵用雙引號括起來,我們可以安全地從文件中讀取。

# ? works as expected
import json

file_name = 'example.json'

with open(file_name, 'r', encoding='utf-8') as f:
    my_data = json.load(f)

    # ????? {'id': 1, 'name': 'Alice', 'age': 30, 'country': 'Austria'}
    print(my_data)
    print(my_data['name'])  # ????? Alice

確保在打開文件時設置編碼關鍵字參數(如上面的代碼示例所示)。

忘記用引號括起屬性或字符串值

以下是無效和有效 JSON 值的一些示例。

example.json

// ?? 無效的 JSON(忘記引用屬性)
{
  "name": "Alice",
  age: 30
}

對象中的 age 屬性未用雙引號引起來,這使得 JSON 無效。

example.json

// ? 有效的 JSON(所有屬性都用雙引號引起來)
{
  "name": "Alice",
  "age": 30
}

示例中的 JSON 是有效的,因為所有屬性和字符串值都用雙引號引起來。

對屬性或值使用單引號而不是雙引號

確保沒有屬性或字符串值用單引號引起來。

example.json

// ?? 無效的 JSON(用單引號引起來的名稱屬性)
{
  'name': "Alice",
  "age": 30
}

示例中的名稱屬性用單引號引起來,這使得 JSON 無效。

永遠不要在 JSON 中使用單引號。 屬性名稱和字符串值必須用雙引號引起來。

example.json

// ? 有效的 JSON(屬性名稱和值用雙引號引起來)
{
  "name": "Alice",
  "age": 30
}

確保你沒有尾隨逗號

在數組的最后一個元素或最后一個鍵值對之后有尾隨逗號會使我們的 JSON 無效。

example.json

// ?? 無效的 JSON(最后一個屬性后的尾隨逗號)
{
  "name": "Alice",
  "age": 30,  ????? 這個逗號使它無效 JSON
}

請注意 ,在 age 屬性之后有一個尾隨逗號。

這會使 JSON 無效,因為不允許使用尾隨逗號。

要解決該錯誤,請確保刪除所有結尾的逗號。

example.json

// ? 有效的 JSON(沒有尾隨逗號)
{
  "name": "Alice",
  "age": 30
}

發出 HTTP 請求時得到空響應

如果我們在發出 API 請求時遇到錯誤,請確保響應在解析之前具有 application/json 內容類型標頭。

import requests


def make_request():
    response = requests.delete('https://example.com/api/users/2')

    print('response: ?????', response)  # response: ????? <Response [204]>
    print('response.text: ?????', response.text)  # response.text: ????? ""

    # response.status_code: ????? 204
    print('response.status_code: ?????', response.status_code)

    print('response.headers: ?????', response.headers)

    if (response.status_code != 204
            and 'content-type' in response.headers
            and 'application/json' in response.headers['content-type']):
        parsed = response.json()
        print('? parsed response: ?????', parsed)
    else:
        # ????? this runs
        print('?? conditions not met')


make_request()

該示例使用 requests 包并發出 HTTP DELETE 請求,該請求返回 204 狀態(無內容)。

嘗試像解析 JSON 一樣解析空響應會引發 JSONDecodeError,因此我們必須檢查:

  • 響應狀態不是 204(無內容)。

  • 響應頭字典有一個內容類型鍵。

  • 內容類型鍵的值為 application/json

這樣我們就可以確定服務器在嘗試使用 reponse.json() 方法(如果使用請求)或 json.loads(my_json_str) 解析它之前向我們發送了一個有效的 JSON 響應。

確保 API 不會以不正確的 Content-Type 響應

如果服務器向我們發送了一個空響應或響應不是 application/json 類型,我們將收到 JSONDecodeError

我們不能嘗試像解析 JSON 一樣解析 text/html 或 XML 響應(或空響應)。

嘗試讀取一個空的 JSON 文件或錯誤地讀取一個 JSON 文件

該錯誤通常是在以下情況下引起的:

  • 試圖錯誤地讀取 JSON 文件。

  • 嘗試讀取一個空的 JSON 文件。

  • 嘗試讀取包含無效 JSON 的 JSON 文件。

我們可以使用 json.load() 方法將 JSON 文件反序列化為 Python 對象。

import json

file_name = 'example.json'

with open(file_name, 'r', encoding='utf-8') as f:
    my_data = json.load(f) # ????? 使用 load() 解析 JSON

    print(my_data)  # ????? {'name': 'Alice', 'age': 30}

該示例假定在同一目錄中有一個名為 example.json 的文件。

example.json

{"name": "Alice", "age": 30}

確保我們正在讀取的文件不為空,因為這通常會導致錯誤。

使用 try/except 語句來處理潛在的錯誤

如果我們的文件可能包含無效的 JSON,請使用 try/except 語句來處理錯誤。

假設我們有以下 JSON 文件。

example.json

 {
   "name": "Alice",
   'age': 30
 }

請注意,age 屬性是單引號的,這使得 JSON 無效。

下面是我們如何使用 try/except 語句來處理錯誤。

import json

file_name = 'example.json'

with open(file_name, 'r', encoding='utf-8') as f:
    try:
        my_data = json.load(f)  # ????? 使用 load() 解析 JSON

        print(my_data)
    except BaseException as e:
        print('The file contains invalid JSON')

我們嘗試從文件中解析 JSON 數據,但文件包含無效的 JSON,因此引發異常,然后在 except 塊中處理。

確保不將文件路徑傳遞給 json.loads()

錯誤的另一個常見原因是在嘗試從 JSON 文件讀取時將文件路徑傳遞給 json.loads() 方法。

import json

file_name = 'example.json'

with open(file_name, 'r', encoding='utf-8') as f:
    # ?? json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
    my_data = json.loads(file_name) # ????? incorrectly passed file path

    print(my_data)  # ????? {'name': 'Alice', 'age': 30}

json.load 方法用于將文件反序列化為 Python 對象,而 json.loads 方法用于將 JSON 字符串反序列化為 Python 對象。

import json

file_name = 'example.json'

with open(file_name, 'r', encoding='utf-8') as f:
    my_data = json.load(f) # ? 將文件對象傳遞給 json.load()

    print(my_data)  # ????? {'name': 'Alice', 'age': 30}

json.load() 方法需要一個包含實現 .read() 方法的 JSON 文檔的文本文件或二進制文件。

使用 json.loads() 手動調用 read() 方法

或者,我們可以手動調用文件對象的 read() 方法并使用 json.loads() 方法。

import json

file_name = 'example.json'

with open(file_name, 'r', encoding='utf-8') as f:
    # ????? 確保調用 read()
    my_data = json.loads(f.read())

    print(my_data)  # ????? {'name': 'Alice', 'age': 30}

    print(type(my_data))  # ????? <class 'dict'>

上面的示例實現了相同的結果,但是我們沒有依賴 json.load() 方法為我們調用文件對象上的 read() ,而是手動執行它并使用 json.loads() 方法。

json.loads() 方法基本上幫助我們從 JSON 字符串加載 Python 本機對象(例如字典或列表)。

在使用 json.loads() 之前嘗試讓你的 JSON 有效

如果我們需要在使用 json.loads() 方法之前使您的 JSON 有效,我們可以嘗試使用 str.replace() 方法。

下面是一個示例 JSON 文件,其中包含使 JSON 無效的單引號屬性。

example.json

 {
   "name": "Alice",
   'age': 30
 }

下面是我們如何使用 str.replace() 方法將字符串中的單引號替換為雙引號。

import json

file_name = 'example.json'

with open(file_name, 'r', encoding='utf-8', errors='ignore') as f:
    a_str = f.read()
    # {
    #   "name": "Alice",
    #   'age': 30    ????? note single quotes
  # }
    print(a_str)

    # ? 用雙引號替換單引號
    valid_json = a_str.replace("'", '"')

    result = json.loads(valid_json)

    print(result)  # {'name': 'Alice', 'age': 30}
    print(result['name'])  # Alice
    print(result['age'])  # 30

str.replace 方法返回字符串的副本,其中所有出現的子字符串都被提供的替換項替換。

該方法采用以下參數:

  • old 字符串中我們要替換的子串

  • new 替換每次出現的 old

  • count 僅替換第一個 count 出現(可選)

我們使用 replace() 方法將字符串中所有出現的單引號替換為雙引號。

這使得 JSON 有效,因此我們可以安全地使用 json.loads() 方法。

JSONEncoder 類默認支持以下對象和類型的轉換。

PythonJSON
PythonJSON
dictobject
list, tuplearray
strstring
int、float、int 和 float 派生枚舉number
Truetrue
Falsefalse
Nonenull

通常導致錯誤的事情

最常見的錯誤原因是:

  • 嘗試解析無效的 JSON 值(例如單引號或尾隨逗號)。

  • 從遠程服務器(例如 204 或 404)獲取空響應并嘗試將其作為 JSON 進行解析。

  • 嘗試像解析 JSON 一樣解析具有不同內容類型(例如文本/html)的響應。

  • 嘗試錯誤地讀取 JSON 文件或嘗試解析空 JSON 文件的內容。

感謝各位的閱讀,以上就是“Python錯誤JSONDecodeError: Expecting value: line 1 column 1怎么解決”的內容了,經過本文的學習后,相信大家對Python錯誤JSONDecodeError: Expecting value: line 1 column 1怎么解決這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

莲花县| 南昌市| 海淀区| 固原市| 通渭县| 苍山县| 台中县| 托克托县| 乌海市| 高安市| 墨玉县| 开化县| 株洲市| 贵阳市| 吐鲁番市| 辽源市| 汕头市| 县级市| 基隆市| 育儿| 城步| 洛隆县| 宜良县| 渝中区| 民和| 墨竹工卡县| 偏关县| 黔南| 九寨沟县| 繁昌县| 库尔勒市| 茶陵县| 宽城| 兖州市| 吐鲁番市| 崇义县| 宜兰县| 襄樊市| 东乌| 榆树市| 安义县|