#!/usr/bin/env python
#-*- coding: utf8 -*-
#__author: "skiler hao"
#date: 2017/4/9 15:26
import
json
from json.encoder import
jsonencoder
class
skilerencoder(jsonencoder):
"""預設的json只支援以下內容的序列化,我們可以對原裝json的jsonencoder作進一步擴充套件
+-------------------+---------------+
| python | json |
+***************====+***************+
| dict | object |
+-------------------+---------------+
| list, tuple | array |
+-------------------+---------------+
| str | string |
+-------------------+---------------+
| int, float | number |
+-------------------+---------------+
| true | true |
+-------------------+---------------+
| false | false |
+-------------------+---------------+
| none | null |
+-------------------+---------------+
to extend this to recognize other objects, subclass and implement a
``.default()`` method with another method that returns a serializable
object for ``o`` if possible, otherwise it should call the superclass
implementation (to raise ``typeerror``).
補充一下,o是啥?o就是我們平常使用的時候json.dumps(object),放入sumps的物件簡稱o
翻譯以下官方的哈:
要擴充套件json識別更多的物件,需要建立jsonencoder乙個子類。實現default()方法
default方法,可以對某樣擴充套件的物件處理,返回可以序列化的物件
要麼繼承父類的default()方法(內容為type error 當前物件不可例項化)
#
"""def
default(self, o):
"""來自官方文件的例子,實現對可迭代物件的序列化,我僅僅是搬運工,擴充套件還是交給大家吧
for example, to support arbitrary iterators, you could
implement default like this::
def default(self, o):
try:
# 如果傳遞的是可以可以轉化為可迭代的物件,那就轉化
iterable = iter(o)
except typeerror:
# 如果轉化失敗,啥都不做,交給最好一行,父類處理(丟擲型別異常)
pass
else:
# 否則就將其轉化為list物件list物件是可以用預設json序列化的
return list(iterable)
# let the base class default method raise the typeerror
# 呼叫父類的default方法
return jsonencoder.default(self, o)
"""try
:
ifisinstance(o, complex):
return str(o.real)+ '
+' + str(o.imag) + 'j'
#例如複數是不能轉化的,我們將其轉化為字串
#如果傳遞的是可以可以轉化為可迭代的物件,那就轉化
#如果物件是iterable我們可以將其轉化為iter(o)轉化為可迭代物件
iterable =iter(o)
except
typeerror:
#如果轉化失敗,啥都不做,交給最好一行,父類處理(丟擲型別異常)
pass
else
:
#否則就將其轉化為list物件list物件是可以用預設json序列化的
return
list(iterable)
#let the base class default method raise the typeerror
#呼叫父類的default方法
return
jsonencoder.default(self, o)
if__name__ == '
__main__':
a = [x for x in range(1,10)]
b= 1 + 2jc = json.dumps(a,cls=skilerencoder)
d = json.dumps(b,cls=skilerencoder)
print(b)
php yar擴充套件json錯誤
編譯安裝php yar擴充套件時出現下面錯誤,網上找了找說要安裝json擴充套件,可是不管用,看下 usr local src yar 1.2.5 packagers json.c檔案發現裡面會使用ext json php json.h檔案 這個檔案在安裝好的php目錄下,我的目錄是 usr loc...
SQLite使用JSON擴充套件
sqlite3.9.0之後的版本,新增了 json 擴充套件。在表中可以儲存 json 型別。實際上 sqlite 將json 型別的字段作為文字字段對待。但可對定義為 json 的字段,呼叫特點的函式,來實現 json 內容的增刪改查。不用再自己用程式實現相似的增刪改查操作。sqlite的 jso...
Python之讀取json資料
從 檔案 中載入 json,用json.load 從 str 中載入 json,用json.loads coding utf 8 import json jsondata 使用json.loads 方法,轉化為dict或者list型別 load是從檔案裡面load,loads是從str裡面load ...