python json dumps与loads有可能犯的错误

json.dumps() 是将一个Python数据结构转换为一个JSON编码的字符串

json.loads() 是将一个JSON编码的字符串转换为一个Python数据结构

如下:

>>> import json

>>> a={‘name‘:‘xiaoming‘}

>>> json.dumps(a)

‘{"name": "xiaoming"}‘

>>> b=‘{"name": "xiaoming"}‘

>>> json.loads(b)

{u‘name‘: u‘xiaoming‘}

注意:我们原先定义a的元素都是用单引号,而dumps转化后都变成了双引号,而在loads后变成python变量时,元素都变成了单引号,并且字符串前加多了个u。

那么当我定义如下的字符串类型时,元素内容用单引号,而整个字符串用双引号括起来:

>>> c="{‘name‘:‘xiaoming‘}"

>>> print json.loads(c)

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

File "/usr/local/python27/lib/python2.7/json/__init__.py", line 339, in loads

return _default_decoder.decode(s)

File "/usr/local/python27/lib/python2.7/json/decoder.py", line 364, in decode

obj, end = self.raw_decode(s, idx=_w(s, 0).end())

File "/usr/local/python27/lib/python2.7/json/decoder.py", line 380, in raw_decode

obj, end = self.scan_once(s, idx)

ValueError: Expecting property name: line 1 column 2 (char 1)

程序报错了,所以一般要求当要字符串通过loads转为python数据类型时,得外层用单引号,里面元素key和value用双引号

还有,即使满足上述条件,当有u前缀的unicode出现修饰时,也会报错:

>>> c=‘{u"name": u"xiaoming"}‘

>>> json.loads(c)

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

File "/usr/local/python27/lib/python2.7/json/__init__.py", line 339, in loads

return _default_decoder.decode(s)

File "/usr/local/python27/lib/python2.7/json/decoder.py", line 364, in decode

obj, end = self.raw_decode(s, idx=_w(s, 0).end())

File "/usr/local/python27/lib/python2.7/json/decoder.py", line 380, in raw_decode

obj, end = self.scan_once(s, idx)

ValueError: Expecting property name: line 1 column 2 (char 1)

所以loads在处理中,还需要把里面的u前缀修饰符去掉

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

时间: 2024-10-07 22:46:04

python json dumps与loads有可能犯的错误的相关文章

python json.dumps() json.dump()的区别

首先说明基本功能: dumps是将dict转化成str格式,loads是将str转化成dict格式. dump和load也是类似的功能,只是与文件操作结合起来了. 看代码实例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 In [1]: import json In [2]: a = {'name': 'wang', 'age': 29} In [3]: b = json.dumps(a) In [4]: print b, type(b) {"age": 29, 

python笔记-dumps()与loads()的使用

json.dumps是将一个Python数据类型列表进行json格式的编码解析, 示例如下: >>> import json #导入python 中的json模块 >>> l = ['iplaypython',[1,2,3], {'name':'xiaoming'}] #创建一个l列表 >>> encoded_json = json.dumps(l) # 将l列表,进行json格式化编码 >>> print repr(l) >&

python json.dumps() 中文乱码问题

python 输出一串中文字符,在控制台上(控制台使用UTF-8编码)通过print 可以正常显示,但是写入到文件中之后,中文字符都输出成ascii编码了.英文字符能正常显示可读字符. 原因:json.dumps 序列化时默认使用的ascii编码,想输出真正的中文需要指定ensure_ascii=False:更深入分析,是应为dJSON object 不是单纯的unicode实现,而是包含了混合的unicode编码以及已经用utf-8编码之后的字符串. 可行的方式如下: 1 import os

第8月第12天 python json.dumps

1.json.dumps return JsonResponse({ 'status': WechatMessage.POST_METHOD_REQUIRED[1], 'status_code': WechatMessage.POST_METHOD_REQUIRED[0] }) import json from django.shortcuts import HttpResponse def JsonResponse(params): return HttpResponse(json.dumps

Python json.dumps 特殊数据类型的自定义序列化操作

场景描述: Python标准库中的json模块,集成了将数据序列化处理的功能:在使用json.dumps()方法序列化数据时候,如果目标数据中存在datetime数据类型,执行操作时, 会抛出异常:TypeError: datetime.datetime(2016, 12, 10, 11, 04, 21) is not JSON serializable 那么遇到json.dumps序列化不支持的数据类型,该怎么办! 首先,我们先来了解一下,json.dumps,序列化操作默认支持的数据类型:

python json.dumps()函数输出json格式,使用ensure_ascii参数对中文输入的支持

在python使用过程中,输入中文,不能正常的输出,可以使用ensure_ascii参数来解决不能输入中文的问题 代码块: import json friends={"name":"王虎","name1":"张二","name2":"姚晨"}print(json.dumps(friends)) 执行结果: 输出的中文是中文的ascii 字符码,而不是真正的中文. 这是因为json.dum

Python json.dumps 中文乱码解决

需要对外提供一个接口,输出的内容里有中文.结果打开一看,返回的是这么一串东西. "owner": "\u8d75\u7acb\u5792" 其实,这是用ASCII输出的转义字符,解决起来很简单.json.dumps方法有一个ensure_ascii方法,设为False即可,默认为True.加上encoding="utf-8",用utf8来encode中文. 调用方法 json.dumps(mydata, ensure_ascii=False, e

python json.dumps 中的ensure_ascii 参数引起的中文编码问题

在使用json.dumps时要注意一个问题 >>> import json >>> print json.dumps('中国') "\u4e2d\u56fd" 输出的会是 '中国' 中的ascii 字符码,而不是真正的中文. 这是因为json.dumps 序列化时对中文默认使用的ascii编码.想输出真正的中文需要指定ensure_ascii=False: >>> import json >>> print jso

[转]python json.dumps 中的ensure_ascii 参数引起的中文编码

本文转自: 梁小白博客(http://biangbiang.cnblogs.com) 在使用json.dumps时要注意一个问题 >>> import json >>> print json.dumps('中国') \u4e2d\u56fd 输出的会是 中国中的ascii 字符码,而不是真正的中文. 这是因为json.dumps 序列化时对中文默认使用的ascii编码. 想输出真正的中文需要指定ensure_ascii=False: >>> impor