Json

一,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格式的对象转化为字符串
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值