一,Json的规格
"firstName": "John",
"lastName": "Smith",
"male": true,
"age": 25,
"address":
{
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": "10021"
},
"phoneNumber":
[
{
"type": "home",
"number": "212 555-1234"
},
{
"type": "fax",
"number": "646 555-4567"
}
]
}
python转成json数据格式定义
json转成python数据格式定义
parse_int=None, parse_constant=None, object_pairs_hook=None, **kw):
"""Deserialize ``fp`` (a ``.read()``-supporting file-like object containing
a JSON document) to a Python object.
"""
parse_int=None, parse_constant=None, object_pairs_hook=None, **kw):
"""Deserialize ``s`` (a ``str`` or ``unicode`` instance containing a JSON
document) to a Python object.
"""
"aa":"Json",
"bb" : 1,
"cc": "dd",
"dd" : {"ss": 1},
"ee": [1,2,3,4]
{"bb" : 1} ,
{"cc": "dd"} ,
{"dd" : {"ss": 1}},
{"ee": [1,2,3,4]}
allow_nan=True, cls=None, indent=None, separators=None,
encoding='utf-8', default=None, **kw):
"""Serialize ``obj`` as a JSON formatted stream to ``fp`` (a
``.write()``-supporting file-like object).
"""
allow_nan=True, cls=None, indent=None, separators=None,
encoding='utf-8', default=None, **kw):
"""Serialize ``obj`` to a JSON formatted ``str``.
"""
1) 并列的数据之间用逗号(",")分隔。
2) 映射用冒号(":")表示。
3) 并列数据的集合(数组)用方括号("[]")表示。
4) 映射的集合(对象)用大括号("{}")表示。
json只有这四种格式规格
"北京市的面积为16800平方公里,常住人口1600万人。上海市的面积为6400平方公里,常住人口1800万。"
这句话写成json格式为
[
{"城市":"北京","面积":16800,"人口":1600},
{"城市":"上海","面积":6400,"人口":1800}
]
JSON用于描述数据结构,有以下形式存在。
对象 (object):一个对象以“{”开始,并以“}”退出。一个对象包含一系列非排序的名称/值对,每个名称/值对之间使用“,”分区。
名称/值(collection):名称和值之间使用“:”隔开,一般的形式是:
{name:value}
一个名称是一个字符串; 一个值可以是一个字符串,一个数值,一个对象,一个布林值,一个有串行表,或者一个null值。
值的有串行表(Array):一个或者多个值用“,”分区后,使用“[”,“]”括起来就形成了这样的列表,形如:
[collection, collection]
字符串:以""括起来的一串字符。
数值:一系列0-9的数字组合,可以为负数或者小数。还可以用“e”或者“E”表示为指数形式。
布林值:表示为 true 或者 false。
在很多语言中它被为和解释为数组。
JSON的格式描述可以参考RFC 4627。
[编辑]举例
{
二,格式转换
先对一个数据json编码,然后再将编码后的数据解码。照理说,解码后的数据应当和原先的数据一样,但是我们发现这里元组对象都被替换成列表对象了。这边就涉及到python和json互相转换的数据格式定义了。看下面两个图:
从上面两个图可以看出python转换成json的时候,list、tuple都会转成array,而json转成python的时候,array就只转成list了
三,python中json的转换函数
1,json转换为python对象
def load(fp, encoding=None, cls=None, object_hook=None, parse_float=None,
json.load传入的是一个文件打开的句柄(fp),内部调用f.read()将一个符合json格式的文件读成字符串,之后转换为python的对象(默认的编码为unicode)
def loads(s, encoding=None, cls=None, object_hook=None, parse_float=None,
把符合json格式的字符串转化为python对象,可以是('{"a":"b"}'),也可是从文件中读出来的字符串
例如:
转换为python字典的json格式
{
}
转换为python的列表的json格式
[
"aa",
]
转化为json格式
def dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True,
json.dump需要两个参数,一个对象和一个打开文件的句柄,将json格式的对象写入句柄文件中
def dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True,
json.dumps只需一个参数,将符合json格式的对象转化为字符串