python中自帶了處理python的模塊,使用時候直接import json即可。
使用loads方法即可將json字符串轉(zhuǎn)換成python對象,對應(yīng)關(guān)系如下: JSON Python
object dict
array list
string unicode
number (int) int, long
number (real) float
true True
false False
null None
一。但在使用json模塊的時候需要注意的是對中文的處理,loads方法如果傳入的字符串的編碼不是UTF-8的話,需要用encoding指定字符編碼
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import json
js = json.loads('{"insun": "泰囧 / 人在囧途2 / Lost in Thailand "}')
print json.dumps(js)
print json.dumps(js,ensure_ascii=False)
{"insun": "\u6cf0\u56e7 / \u4eba\u5728\u56e7\u90142 / Lost in Thailand "}
{"insun": "泰囧 / 人在囧途2 / Lost in Thailand "}
二。如果傳入的字符串的編碼不是UTF-8的話,需要用encoding指定字符編碼
對于:
dataDict = json.loads(dataJsonStr);
其中dataJsonStr是json字符串,如果其編碼本身是非UTF-8的話,比如是GB2312的,那么上述代碼,就會導(dǎo)致出錯。改為對應(yīng)的:
dataDict = json.loads(dataJsonStr, encoding="GB2312");
就可以了。
此處,即對應(yīng)著上面函數(shù)解釋中的:
If s is a
str instance and is encoded with an ASCII based encoding other than UTF-8 (e.g. latin-1), then an appropriate encoding name must be specified
三。如果要解析的字符串,本身的編碼類型,不是基于ASCII的,那么,調(diào)用json.loads之前,需要先將對應(yīng)字符串,轉(zhuǎn)換為Unicode類型的
還是以上述的:
dataDict = json.loads(dataJsonStr, encoding="GB2312");
為例,即使你此處的字符串dataJsonStr,已經(jīng)通過encoding指定了合適的編碼,但是由于其中,包含了其他的編碼的字符,比如我本身 dataJsonStr是GB2312的字符,但是其中又包含了的一些日文字符,此時,json.loads還是會出錯,因為此處的 dataJsonStr不是以ASCII為基礎(chǔ)的字符編碼,所以,需要先去將dataJsonStr轉(zhuǎn)換為Unicode,然后再調(diào)用 json.loads,就可以了。
代碼如下:
dataJsonStrUni = dataJsonStr.decode("GB2312");
dataDict = json.loads(dataJsonStrUni, encoding="GB2312");
官網(wǎng):
18.2.
json — JSON encoder and decoder
http://docs.python.org/2/library/json.html
json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, encoding="utf-8", default=None, sort_keys=False, **kw)
json.loads(s[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])
參考:
python json 中文
Python JSON模塊解碼中文的BUG
http://www.douban.com/note/214822809/
使用python處理json
http://www.giser.net/?p=990
python下調(diào)用json.dumps中文顯示問題解決辦法
http://blog.csdn.net/sagittar/article/details/6169605
Python解析json數(shù)據(jù)結(jié)構(gòu)范例
http://hi.baidu.com/leejun_2005/item/fc688affc196f8723c198b7c
Python中json.loads解析包含\n的字符串會出錯
http://www.crifan.com/use_python_json_loads_parse_string_contain_newline_will_fail_error/