2013-02-11 61 views
2

我想創建一個字符串JSON對象加載使用json模塊;然而,我有一些麻煩,因爲我的一些值是python TrueFalse而不是unicode字符串。例如,我要做到以下幾點:加載特殊值的JSON對象作爲字符串

>>> newDict = json.loads(u'{"firstKey": True, "secondKey": False}') 
>>> newDict.get('firstKey') == True 
True 

,但我發現:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib64/python2.6/json/__init__.py", line 307, in loads 
    return _default_decoder.decode(s) 
    File "/usr/lib64/python2.6/json/decoder.py", line 319, in decode 
    obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
    File "/usr/lib64/python2.6/json/decoder.py", line 336, in raw_decode 
    obj, end = self._scanner.iterscan(s, **kw).next() 
    File "/usr/lib64/python2.6/json/scanner.py", line 55, in iterscan 
    rval, next_pos = action(m, context) 
    File "/usr/lib64/python2.6/json/decoder.py", line 185, in JSONObject 
    raise ValueError(errmsg("Expecting object", s, end)) 
ValueError: Expecting object: line 1 column 13 (char 13) 

,當然,如果我改變TrueFalse"True""False",我的條件也不滿足因爲它們現在是字符串,並且將返回False

回答

4

你可以用小寫字母truefalse

>>> import json 
>>> d = {'firstKey': True, 'secondKey': False} 
>>> json.dumps(d) 
'{"secondKey": false, "firstKey": true}' 
>>> s = json.dumps(d) 
>>> json.loads(s) == d 
True 
+0

......這是由於JSON代表「JavaScript對象符號」的事實,所以它必須是有效的JavaScript,而不是Python。而JS確實使用'true'和'false'。 – Sergey 2013-02-11 01:19:25

+0

是的,我可以使用'true'和'false'。所以,這兩種方法都有效。 – Aaron 2013-02-11 01:21:40

+0

@Sergey:不管它在JavaScript中如何,它都必須符合JSON規範:http://json.org。當然,JSON是在JavaScript對象文字之後建模的,但它們是兩個獨立的技術。 – 2013-02-11 01:36:36