拥趸是什么意思语解释例句-海词汉语-2011春节


2023年3月29日发(作者:逆后宫动漫推荐)

Python中的json模块dumps参数详解

1.什么是JSON

维基百科中的定义:JSON(JavaScriptObjectNotation,JavaScript对象表⽰法)是⼀种由构想和设计、轻量级的资料交换语⾔,该语

⾔以易于让⼈阅读的⽂字为基础,⽤来传输由属性值或者序列性的值组成的数据对象。尽管JSON是的⼀个⼦集,但JSON是独⽴于语⾔

的,并且采⽤了类似于家出师表全文多少字 族的⼀些习惯。

⼀个数据⽰例:

{

\"firstName\":\"Micheal\",

\"lastName\":\"Jordan\",

\"hobbies\":[\"running\",\"golfing\",\"singing\"],

\"age\":35,

\"children\":[

{

\"firstName\":\"Marcus\",

\"age\":14

},

{

\"firstName\":\"Jeffrey\",

\"age\":12

}

]

}

JSON⽀持原始类型,如数字,字符串,以及嵌套列表和对象。

JSON的编码过程通常称为序列化。该术语是指将数据对象转换为⼀系列字节以通过⽹络存储或传输

中的json

2.1序列化和

dump将数据写⼊⽂件

dumps将数据⽣成字符串,dump+str

代码⽰例

In[1]:importjson

In[2]:([\'foo\',{\'bar\':(\'baz\',None,1.0,2)}])

Out[2]:\'[\"foo\",{\"bar\":[\"baz\",null,1.0,2]}]\'

将数据dump到⽂件

In[3]:withopen(\'\',\'w\')asf:

...:data={\'database\':\'mongo\'}

...:(data,f)

数据{\"database\":\"mongo\"}被写⼊到⽂件中

2.2反序列化和

load将⽂件中的JSON数据载⼊为对象

lo胡笳 ads将序列化的json字符串,载⼊为JSON对象

通过表格可以看到,反序列化并不是对序列化表的完美逆向,反序列化不能⽣成tuple类型的数据.

In[4]:data=(\'amigo\',\'branda\',\'ariza\')

In[5]:((data))

Out[5]:[\'amigo\',\'branda\',\'ariza\']

2.3dumps的参数

dumps函数提供⼀些参数,可以控制序列化过程中的⾏为.

参数描述默认值

skipkeys是否跳过⽆法被JSON序列化的key(包括str,int,float,bool,None)False

sort_keys是否对数据按照key进⾏排序False

ensure_ascii输出保证将所有输⼊的⾮ASCII字符转义True

allow_nan是否允许JSON规范外的float数据(nan,inf,-inf)True

default应该是⼀个函数,当某个value⽆法被序列化时,对其调⽤该函数None

indent应该是⼀个正整数,代表序列化后的缩进None

separator应该是⼀个(item_separator,key_separator)元组,默认取值为(\',\',\':\')None

check_circular是否检查循环引⽤True

下⾯使⽤⼀些数据⽰例依次说明:

2.3.1skipkeys

In[1]:importjson

In[2]:deffunc():

...:print(\'fun\')

In[3]:data={func:\'value\',\'key\':\'data\'}

In[4]:(data)

---------------------------------------------------------------------------

TypeError:keysmustbestr,int,float,boolorNone,notfunction

In[5]:(data,skipkeys=True)

Out[5]:\'{\"key\":\"data\"}\'

字典数据data中的其中⼀个key是个函数func,⽆法直接被JSON序列化,所以对其执⾏时,报TypeError,将skipkeys置为

True,序列化时跳过键值func,序列化成功.

2.3.2sort_keys

In[6]:data={\'c\':3,\'b\':2,\'a\':1}

In[7]:(data)

Out[7]:\'{\"c\":3,\"b\":2,\"a\":1}\'

In[8]:(data,sort_keys=True)

Out[8]:\'{\"a\":1,\"b\":2,\"c\":3}\'

指定sort_keys=True之后,序列化后的数据按照key值[a,b,c]进⾏排序

2.3.3ensure_ascii

In[13]:data={\'first\':\'⼤⽜\',\'second\':\'⼆狗\',\'third\':\'猫蛋\'}

In[14]:(data)

Out[14]:\'{\"first\":\"u5927u725b\",\"second\":\"u4e8cu72d7\",\"third\":\"u732bu86cb\"}\'

In[15]:(data,ensure_ascii=False)

Out[15]:\'{\"first\":\"⼤⽜\",\"second\":\"⼆狗\",\"third\":\"猫蛋\"}\'

dunps时,指定了ensure_ascii=False使序列化后的数据不强制使⽤ascii吗转码,输出即是中⽂

2.3.4allow_nan

In[9]:data={\'float\':1.2,\'nan\':float(\'nan\'),\'inf\':float(\'inf\')}

In[10]:data

Out[10]:{\'float\':1.2,\'nan\':nan,\'inf\':inf}

In[11]:(data)

Out[11]:\'{\"float\":1.2,\"nan\":NaN,\"inf\":Infinity}\'

In[12]:(data,allow_nan=False)

ValueError:Outofrangefloatva白居易村居二首 luesarenotJSONcompliant

指定allow_nan=False之后,被序列化对象包含,超出范围的float数据,报ValueError

2.3.5default

In[1抵御的拼音 ]:fromdatetimeimportdatetime

In[2]:importjson

In[3]:data={\'date\':()}

In[3]:(data)

TypeError:ObjectoftypedatetimeisnotJSONserializable

In[4]:(data,default=lambdax:me(\'%Y/%m/%d%H:%M\'))

Out[4]:\'{\"date\":\"2021/08/1311:03\"}\'

数据data中包含⽆法被序列化的对象,date字段为me格式的数据,直接调⽤报TypeError,指定default函数之

后,对date的字段应⽤函数摘抄夏天的优美段落 转换成字符串格式,序列化成功.

2.3.6indent

In[5]:data={\'lgd\':{\'players\':[\'ame\',\'nothingtosay\',\'faith_bian\',\'xinQ\',\'y`\'],\'coach\':\'xiao8\'},\'VG\':{\'players\':[\'poyoyo\',\'ori\',\'old_eleven\',\'pyw\',\'dy\']}}

In[6]:print((data))

{\"lgd\":{\"players\":[\"ame\",\"nothingtosay\",\"faith_bian\",\"xinQ\",\"y`\"],\"coach\":\"xiao8\"},\"VG\":{\"players\":[\"poyoyo\",\"ori\",\"old_eleven\",\"pyw\",\"dy\"]}}

In[7]:print((data,indent=4))

{

\"lgd\":{

\"players\":[

\"ame\",

\"nothingtosay\",

\"faith_bian\",

\"xinQ\",

\"y`\"

],

\"coach\":\"xiao8\"

},

\"VG\":{

\"players\":[

\"poyoyo\",

\"ori\",

\"old_eleven\",

\"pyw\",

\"dy\"

]

}

}

dumps时,设置indent=4,数据增加换⾏符,数据层级以4个空格为缩进.

2.3.7separator

In[8]:data

Out[8]:{\'key\':\'value\',\'border\':\'lands\'}

In[9]:(data)

Out[9]:\'{\"key\":\"value\",\"border\":\"lands\"}\'

In[10]:(data,separators=(\',\'20句爱国名言名句 ,\':\'))

Out[10]:\'{\"key\":\"value\",\"border\":\"lands\"}\'

In[11]:(data,separators=(\'&\',\'@\'))

Out[11]:\'{\"key\"@\"value\"&\"border\"@\"lands\"}\'

默认数据分割符为\',\'和\':\',通过指定separators=(\',\',\':\')去除空格后,可以使序列化后的数据更加紧凑.甚⾄可以⾃定义连接符来dump成⾃

定义的数据样式.

2.3.8check_circular

In[21]:data={\'key\':\'value\',\'border\':\'lands\'}

In[22]:data[\'data\']=data

In[23]:data

Out[23]:{\'key\':\'value\',\'border\':\'lands\',\'data\':{...}}

In[24]:(data)

---------------------------------------------------------------------------

ValueError:Circularreferencedetected

In[25]:(data,check_circular=False)

---------------------------------------------------------------------------

RecursionError:maximumrecursiondepthexceededwhileencodingaJSONobject

当data中存在对⾃⼰的递归引⽤时,会报ValueError,指定指定check_circular=False后,不进⾏循环引⽤检验.

总结:

本⽂总结了python内置模块json的常⽤⽅法dump和load

序列化过程中的⼀些参数控制总结:

①⽆法序列化的数据,key的跳过,value使⽤函数转换

②数据的排序,编码,⾮法float数据

③缩进和分隔符

需要更⾼级的对JSON数据的处理⽅法,参见:

更多推荐

dumps是什么意思ps在线翻译读音例句