Study「Python」:Expecting property name enclosed in double quotes: line 1 column 2 (char 1)問題解決

今天在處理 JSON 數據的時候遇到了一個意想不到的問題,不過也算是個小問題吧,記錄一下解決方案,同時提醒自己下次不要犯同樣的錯誤了。

目錄

一、json

(一)json.loads

(二)json.dumps

二、問題

三、解決方法


一、json

使用 Python 處理 JSON 數據還是非常簡單的,常用的命令有兩個

  1. json.loads:用於解碼 JSON 數據。該函數返回 Python 字段的數據類型
  2. json.dumps:用於將 Python 對象編碼成 JSON 字符串

(一)json.loads

用於解碼 JSON 數據。該函數返回 Python 字段的數據類型,最常使用的代碼如下:

import json

jsonData = '{"a":1,"b":2,"c":3,"d":4,"e":5}'

data = json.loads(jsonData)
print(type(data))
print(data)

運行結果:

<class 'dict'>
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5} 

簡單來說,就是把一段 JSON 字符串解析爲 Pythondict 

(二)json.dumps

用於將 Python 對象編碼成 JSON 字符串,最常使用的代碼如下:

import json

data = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}

jsonData = json.dumps(data)
print(type(jsonData))
print(jsonData)

運行結果:

<class 'str'>
{"a": 1, "b": 2, "c": 3, "d": 4, "e": 5}

簡單來說,就是把一段 Pythondict 解析爲 JSON 字符串 。 

這裏,我們可以使用參數讓 JSON 數據格式化輸出,修改的代碼如下:

jsonData = json.dumps(data, sort_keys=True, indent=4, separators=(',', ': '))

運行結果:

<class 'str'>
{
    "a": 1,
    "b": 2,
    "c": 3,
    "d": 4,
    "e": 5
}

二、問題

Expecting property name enclosed in double quotes: line 1 column 2 (char 1)”翻譯爲“要求屬性名用雙引號括起來:第1行第2列(字符1)”。這個問題的出現是因爲在把一段 Pythondict 解析爲 JSON 字符串時,沒有使用上述的 json.dumps 方法而是使用 str 方法強制將其解析爲 JSON 字符串,代碼如下:

data = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}

jsonData = str(data)

print(type(jsonData))
print(jsonData)

運行結果:

<class 'str'>
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}

可以看到這種運行方式與使用 json.dumps 方法的運行結果十分相似,但是當我們重新將該輸出結果 jsonData 解析爲 Pythondict 時,問題就出現了,代碼如下:

import json

data = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}

jsonData = str(data)

text = json.loads(jsonData)
print(type(text))
print(text)

運行結果:

json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)

三、解決方法

demjson Python 的第三方模塊庫,可用於編碼和解碼JSON 數據,包含了 JSONLint 的格式化及校驗功能,可以有效處理上述問題。

常用的命令有兩個

  1. demjson.encode:將 Python 對象編碼成 JSON 字符串
  2. demjson.decode:將已編碼的 JSON 字符串解碼爲 Python 對象

具體使用方法與 json.loadsjson.dumps 相似,就不過多闡述了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章