2012-02-08 54 views
26

我想解析一個JSON對象到Python dict。我從來沒有這樣做過。當我搜索這個特定的錯誤時,(第一個字符有什麼問題?),其他帖子都說,被加載的字符串實際上並不是JSON字符串。不過,我很確定這是。試圖解析Python中的JSON。 ValueError:期望的屬性名稱

在這種情況下,eval()工作正常,但我想知道是否有更合適的方法?

注意:該字符串直接來自Twitter,通過ptt工具。

>>> import json 
>>> line = '{u\'follow_request_sent\': False, u\'profile_use_background_image\': True, 
     u\'default_profile_image\': False, 
     u\'verified\': False, u\'profile_sidebar_fill_color\': u\'DDEEF6\', 
     u\'profile_text_color\': u\'333333\', u\'listed_count\': 0}' 
>>> json.loads(line) 

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 326, in loads 
     return _default_decoder.decode(s) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 366, in decode 
     obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 382, in raw_decode 
     obj, end = self.scan_once(s, idx) 
    ValueError: Expecting property name: line 1 column 1 (char 1) 
+8

這只是python語法,而不是JSON。使用'ast.literal_eval'進行安全評估 – JBernardo 2012-02-08 04:36:28

回答

28

這絕對不是JSON--不像上面那樣打印。它已經被解析爲一個Python對象 - JSON將有false而不是False,並且不會顯示字符串作爲unicode的u(所有JSON字符串都是unicode)。你確定你沒有把你的json字符串變成一個Python對象在鏈中的某個地方,因此將它加載到json.loads()中顯然是錯誤的,因爲事實上它不是一個字符串?

+2

這正是問題所在。謝謝。 – gabe 2012-02-22 19:53:02

27

有時你可以有這個錯誤,因爲你的字符串值不被python很好地識別。舉個例子:我花了很多時間來尋找這種錯誤的起源。這是我發現的。

有時,語言識別的一種報價,而不是另一個問題: 順便說一句,在解析字符串到JSON在JavaScript中所有的報價必須在「格式

將字符串解析成JavaScript的JSON所有的報價都在「格式是不是真的邏輯

希望你可以使用替換功能對於Python:。

json.loads(s.replace("\'", '"')); 

希望它會拯救你,我已經花了狩獵這個時間錯誤!

+0

這是我遇到的問題。謝謝 – Alireza 2015-01-09 09:28:46

+0

有關JavaScript中JSON引號的回答部分看起來有點矛盾。我繼續和[測試](https://jsbin.com/pupayajoni/1/edit?js,console)在JavaScript中的兩種變體(在Chrome中)。結果是:第三段是正確的:標準JavaScript解析器不允許單引號作爲字符串字面邊界。 – 2016-03-23 17:43:05

+1

順便說一句[JSON規範](http://www.json.org)只允許用雙引號括起來的字符串,所以這種行爲並不特定於JavaScript和Python JSON解析器。 – 2016-03-23 17:45:30

7

當我在屬性列表的末尾掛了一個逗號時,我得到了這個錯誤。由於逗號期望另一個屬性名稱,但沒有。

+1

JSON不允許尾隨逗號這樣一個愚蠢的東西!而絕對禁止,json.load只給你'ValueError:期望用雙引號括起來的屬性名稱 – Ufos 2016-10-21 12:07:10

0

確保您的JSON文件沒有以//開頭的行(錯誤地應該註釋!)。我有相同的ValueError消息,並且在我從我的文件中刪除//後消失了。