拥趸是什么意思语解释例句-海词汉语-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在线翻译读音例句
发布评论