python json 处理_python2 json的处理

简述

python2 json的学习和使用

注意

json 中对于字典中的字符串,不管是键还是值都用双引号,

使用单引号报错:

print json.loads(dict_msg)

File "C:Python27libjson__init__.py", line 339, in loads

return _default_decoder.decode(s)

File "C:Python27libjsondecoder.py", line 364, in decode

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

TypeError: expected string or buffer

可以用下面的方法转换

json_string=json.dumps(s)

python_obj=json.loads(json_string)

json的使用

在python中自带有json的处理模块,只需要import json就行

在python和json转换表

python 转 json

python

json

dict

object

list, tuple

array

str, unicode

string

int, long, float

number

True

true

False

false

None

null

json 转 python

json

python

object

dict

array

list

string

unicode

number(int)

int, long

number(real)

float

true

True

false

False

null

None

在json数据中false和true对应python中的False, True; null对应python中的None

注意:通过表可以看见在转换的时候tuple会转换成array,并且在通过load方式也只会转换成list,对于str编码都会转换成unicode,如果使用则需要在使用前添加适当处理

基本使用

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

json.dumps(data) #生成json字符串

json.dump(data,file) #生成json类文件对象

将json对象转换成python

json.loads(str) #解析json字符串

json.load(file) #解析json类文件对象

注意在使用loads方法时,若str为空会报错。

json中unicode使用

json中utf-8编码输出

>>> js = json.loads('{"language": "中文 / Chinese "}')

>>> print json.dumps(js)

{"language": "u4e2du6587 / Chinese "}

>>> print json.dumps(js,ensure_ascii=False)

{"language": "中文 / Chinese "}

其他编码转换成json对象

可以看见在json.dumps(data)中默认encoding=utf-8转换成unicode编码,所以其他编码输入需要设置encoding

>>> str = u'中文'

>>> gbk_str = str.encode('gb2312')

>>> type(gbk_str)

>>> json_str = json.dumps(gbk_str)

Traceback (most recent call last):

File "", line 1, in

File "/usr/lib/python2.7/json/__init__.py", line 243, in dumps

return _default_encoder.encode(obj)

File "/usr/lib/python2.7/json/encoder.py", line 201, in encode

return encode_basestring_ascii(o)

UnicodeDecodeError: 'utf8' codec can't decode byte 0xd6 in position 0: invalid continuation byte

>>> json_str = json.dumps(gbk_str,encoding='gb2312')

>>> type(json_str)

>>> print json_str

"u4e2du6587"

将对象json化

import json

class Student(object):

def __init__(self, name, age, score):

self.name = name

self.age = age

self.score = score

s = Student('Bob', 20, 88)

对于dumps()方法,其中default参数定义了如何将任意一个对象变成可序列为json的对象,所以需要一个转换函数

def student2dict(std):

return {

'name': std.name,

'age': std.age,

'score': std.score

}

将类实例通过转换函数转换成dict,再序列化为json对象

json.dumps(s, default=student2dict)

可以使用实例的__dict__属性,dict属性用来存储实例变量

json.dumps(s, default=lambda obj: obj.__dict__)

json反序列化,loads()方法首先转换出一个dict对象,然后object_hook参数,将dict转换成类实例

def dict2student(d):

return Student(d['name'], d['age'], d['score'])

json_str = '{"age": 20, "score": 88, "name": "Bob"}'

json.loads(json_str, object_hook=dict2student)

漂亮的输出

用pprint()代替print输出,输出json

添加indent参数,输出python对象json.dumps(data, indent=4, ensure_ascii=False)

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值