python中的json函数_python3-----json函数

json函数

使用json函数之前,首先需要导入json模块,import json

JSON 的规定字符集是UTF-8,字符串必须使用""双引号,Object的键也必须使用双引号,不能使用单引号;

JSON格式的数组或者对象中,不同的元素用逗号隔开,最后一个元素后面,不能加逗号。

python数据类型与json数据类型的映射关系

python

python

dict

object

list, tuple

array

str, unicode

string

int, long, float

number

True

true

False

false

None

null

json转换为python

Python中的list和tuple都被转化成json的数组,而解码后,json的数组最终被转化成Python的list的,无论是原来是list还是tuple。

json中常用的方法

方法

描述

json.dumps()

将 Python 对象编码成 JSON 字符串

json.loads()

将已编码的 JSON 字符串解码为 Python 对象

json.dump()

将Python内置类型序列化为json对象后写入文件

json.load()

读取文件中json形式的字符串元素转化为Python类型

JSON可以表示四种主类型数据

字符串 string

数字 number

布尔类 boolean

空值 null

以及两结数据结构

对象 object

数组 array

>>> import json

>>> json.dumps({1:'a',2:'b'})#python的字典转换为json的对象

'{"1": "a", "2": "b"}'#1和2都加了双引号的,因为json的名称是必须要加双引号的

>>> json.dumps([1,2,3])#python的列表转换为json的数组

'[1, 2, 3]'

>>> json.dumps((1,2,3,'a'))#python的元祖转换为json的数组

'[1, 2, 3, "a"]'#注意此时显示的是方括号

>>> json.dumps('abdcs')#python的字符串转换为json的字符串

'"abdcs"'

>>> json.dumps(u'a')#python的unicode字符串转换为json的字符串

'"a"'

>>> json.dumps(13)#python的整数转换为json的数字

'13'

>>> json.dumps(3.1415)#python的浮点数转换为json的数字

'3.1415'

>>> json.dumps(True)#python的True转换为json的数组true

'true'

>>> json.dumps(False)#python的False转换为json的数组false

'false'

>>> json.dumps(None)#python的None转换为json的null

'null'

#json本质上是一个字符串

>>> type(json.dumps([1,2,3,4]))

>>> import json

>>> data=[1,2,3,4]

>>> data_json=(1,2,3,4)

>>> json.dumps(data)

'[1, 2, 3, 4]'

>>> json.dumps(data_json)

'[1, 2, 3, 4]'

>>> a=json.dumps(data)

>>> b=json.dumps(data_json)

>>> json.loads(a)

[1, 2, 3, 4]

>>> json.loads(b)

[1, 2, 3, 4]

#元组和列表解析出来的均是数组。

#coding=utf-8

#coding=utf-8

import json

a = [{1:12, 'a':12.3}, [1,2,3], (1,2), 'asd',13, 3.3, True, False, None]

b=json.dumps(a)

c=json.loads(b)

print(u"编码前\n", a)

print(u"编码后\n", b)

print(u"解码后\n", c)

for i in range(len(c)):

print(type(c[i]),end='')

运行之后:

编码前

[{1: 12, 'a': 12.3}, [1, 2, 3], (1, 2), 'asd', 13, 3.3, True, False, None]

编码后

[{"1": 12, "a": 12.3}, [1, 2, 3], [1, 2], "asd", 13, 3.3, true, false, null]

解码后

[{'1': 12, 'a': 12.3}, [1, 2, 3], [1, 2], 'asd', 13, 3.3, True, False, None]#解码后字典里面键1变成加引号,,元组变成了列表

import json

data = {

'nanbei':'haha',

'a':[1,2,3,4],

'b':(1,2,3)

}

with open('json_test.txt','w+') as f:

json.dump(data,f)#在当前文件夹创建一个json_test.txt,将json.dump(data)写入f

with open('json_test.txt','r+') as f:

print(json.load(f))

#运行之后{'nanbei': 'haha', 'a': [1, 2, 3, 4], 'b': [1, 2, 3]}

对于JSON中数字number类型的数据

JSON中的实数real number类型的精度不能超过Python中的float类型的精度范围, 否则就有精度损失. 如下例:

>>> json.loads('3.141592653589793238462643383279')

3.141592653589793

JSON标准不包括非数字NaN, 正无穷Infinity和负无穷-Infinity

但是json.loads方法默认会将JSON字符串中的NaN, Infinity, -Infinity转化为Python中的float(‘nan’), float(‘inf’)和float(’-inf’). 注意, 这里JSON中的NaN, Infinity, -Infinity必须大小写正确并且拼写完整.

>>> json.loads('{"inf": Infinity, "nan": NaN, "ninf": -Infinity}')

{'inf': inf, 'nan': nan, 'ninf': -inf}

bytes和bytearray数据

>>> json.loads('{"a": 123}'.encode('UTF-8'))

{'a': 123}

>>> json.loads(bytearray('{"a": 123}', 'UTF-8'))

{'a': 123}

由于Python 3中str类型总是使用UTF-8编码, 所以s参数为str类型时, json.loads方法自动使用UTF-8编码. 并且, str不能以BOM字节开头.

当s参数为bytes或者bytearray时, json.loads方法会自动判断为UTF-8, UTF-16还是UTF-32编码. 默认也是将其按照UTF-8编码转化为str对象进行后续处理.

json.dumps()函数参数的使用

help(‘json.dumps’)

son.dumps = dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)

help(‘json.dump’)

json.dump = dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)

将“obj”序列化为JSON格式的流到“fp”(a .write()-支持类似文件的对象)。

函数作用: 将Python的对象转变成JSON对象

skipkeys: 如果为True的话,则只能是字典对象,否则会TypeError错误, 默认False,shipkeys可以跳过那些非string对象的key的处理,就是不处理。

ensure_ascii: 确定是否为ASCII编码,默认是True,表示使用ascii码进行编码。如果设置为False,就会以Unicode进行编码。由于解码json字符串时返回的就是Unicode字符串,所以可以直接操作Unicode字符,然后直接编码Unicode字符串,这样会简单些

check_circular: 循环类型检查,如果为True的话

allow_nan: 确定是否为允许的值

indent: 会以美观的方式来打印,呈现,实现缩进,indent的数值表示缩进的位数

separators: 对象分隔符,去掉逗号“,”和冒号“:”后面的空格。separators=(’,’,’:’)

encoding: 编码方式,默认为utf-8

sort_keys: 如果是字典对象,选择True的话,表示升序,会按照键的ASCII码来排序,是否按字典排序(a到z)输出,默认编码成json格式字符串后,是紧凑输出,并且也没有顺序的,不利于可读。

json.loads()

将json的字符串解码成python对象

>>> json.loads('{"a":"b"}')#外面用单引号

{'a': 'b'}

>>> json.loads('{"2":1}')

{'2': 1}

>>> a=json.loads('{"1":{"a":"b"}}')

>>> a

{'1': {'a': 'b'}}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值