Json

来源:互联网 发布:日本战国时代知乎 编辑:程序博客网 时间:2024/06/18 17:16
一,Json的规格
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。
[编辑]举例

{
     "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"
         }
     ]
 }

二,格式转换
先对一个数据json编码,然后再将编码后的数据解码。照理说,解码后的数据应当和原先的数据一样,但是我们发现这里元组对象都被替换成列表对象了。这边就涉及到python和json互相转换的数据格式定义了。看下面两个图:
json格式
           python转成json数据格式定义
json转成python数据格式定义
        json转成python数据格式定义
从上面两个图可以看出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,
        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.
    """
json.load传入的是一个文件打开的句柄(fp),内部调用f.read()将一个符合json格式的文件读成字符串,之后转换为python的对象(默认的编码为unicode)

def loads(s, encoding=None, cls=None, object_hook=None, parse_float=None,
        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.
    """
把符合json格式的字符串转化为python对象,可以是('{"a":"b"}'),也可是从文件中读出来的字符串

例如: 
转换为python字典的json格式
{
 "aa":"Json",
 "bb" : 1,
 "cc": "dd",
 "dd" : {"ss": 1},
 "ee": [1,2,3,4] 
}

转换为python的列表的json格式
[  "aa",
   {"bb" : 1} ,
   {"cc": "dd"} ,
   {"dd" : {"ss": 1}},
   {"ee": [1,2,3,4]} 
]

转化为json格式
def dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True,
        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).
    """
json.dump需要两个参数,一个对象和一个打开文件的句柄,将json格式的对象写入句柄文件中

def dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True,
        allow_nan=True, cls=None, indent=None, separators=None,
        encoding='utf-8', default=None, **kw):
    """Serialize ``obj`` to a JSON formatted ``str``.
    """
json.dumps只需一个参数,将符合json格式的对象转化为字符串
原创粉丝点击