python json模块详解,python3 os模块
1.什么是JSON维基百科中的定义: JSON(JavaSscriptObjectNrotation,JavaScript对象表示)是xqdlm构想和设计的一种轻量级数据交换语言,基于易读的字符,用于传输属性值或序列。尽管JSON是JavaScript的一个子集,但JSON是一种独立于语言的文本格式,并且采用了一些类似于C语言家族的习惯。
一个数据示例:
{ 名字:迈克尔,姓氏:乔丹,爱好:[跑步,打高尔夫,唱歌],年龄:35,孩子:[ { 名字:马库斯,年龄:14},{ 名字:杰弗里,年龄:12}]} JSON支持基本类型,如数字,字符串,嵌套列表和对象。
JSON的编码过程通常被称为序列化。这个术语指的是将数据对象转换成一系列字节,以便存储或通过网络传输。
2.Python中的json 2.1序列化json.dump和json.dumps转储将数据写入文件转储将数据生成字符串,转储字符串代码示例
In [1]:导入JSON in [2]: json.dumps ([foo ,{bar: (baz ,none,1.0,2)}]) dump [2]: [foo ,{bar: [baz ,
在[3]中:用open (data.json , w )作为f:data={database: mongo}.json.dump (data,f)数据{database: mongo}写入data.json文件。
2.2反序列化json.load和json.loads load将文件中的json数据作为对象加载。Loads将序列化JSON字符串,并将其作为JSON对象加载。从表中可以看出,反序列化并不是序列化表的完美反转,反序列化不能生成元组类型的数据。
In [4]: data=(amigo , branda , Ariza )in[5]:JSON . loads(JSON . dumps(data))out[5]:2.3转储的[amigo , branda , Ariza]参数
参数描述默认值skipkeys是否跳过无法被JSON序列化的key(包括str, int, float, bool, None)Falsesort_keys是否对数据按照key进行排序Falseensure_ascii输出保证将所有输入的非 ASCII 字符转义Trueallow_nan是否允许JSON规范外的float数据(nan, inf, -inf)True0 10-59000default应该是一个函数, 当某个value无法被序列化时, 对其调用该函数Noneindent应该是一个正整数, 代表序列化后的缩进Noneseparator应该是一个(item_separator, key_separator)元组, 默认取值为 (, , : )Nonecheck_circular是否检查循环引用010
2 . 3 . 1 skip keys In[1]:import JSON In[2]:def func():print( fun )In[3]:data={ func: value , key : data } In[4]:json . dumps(data)-TypeError:键必须是str、int、Float、bool或none,而不是function in [5]: json.dumps (data,skip keys=true)out[5]: { key : data } 字典数据中的一个键是func,它不能被JSON直接序列化,因此,当执行json.dumps时,会报告type error,01序列化时跳过键值func,序列化成功。
2 . 3 . 2TrueIn[6]:data={ c :3, b: 2, a :1 } In[7]:JSON . dumps(data)Out[7]: { c :3, b: 2, a: 1}In [8]: json.dumps(data,Sort_keys=True) out [8]: {a: 1, b: 2, c: 3} 指定Sort_keys=True后,序列化后的数据按照键值[a,b
2 . 3 . 3skipkeysin[13]:data={ first : wsdkj , second :二狗, third :猫的蛋 } in[14]:JSON . dumps(data)out[14]:。Second: \ \ U4E8C \ \ U72D7 , Third : \ \ U732b \ \ U86CB } in[15]:JSON . dumps(data,guarantee _ ascii=false)out[15]: { Third :猫蛋 } dunps,确保_ ascii=False被指定以便序列化数据不被强制使用ascii?转码,输出是中文。
2 . 3 . 4 Allow _ 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]:JSON . dumps(data)Out[11]: { float :1.2, nan: NaN, INF :Infinity } In[12]:JSON . dumps(data,Allow_nan=False)
2 .3 .5[1]中的默认值:从日期时间导入[2]中的日期时间:导入JSON[3]:data={ date :日期时间。now()} In[3]:JSON。转储(数据)类型错误:日期时间类型的对象不是在[4]中可序列化的。dumps(data,default=lambda x:x . strftime( % Y/% M/% d % H:% M ))Out[4]: { date: 2021/08/13 11:03 } 数据数据中包含无法被序列化的对象,日期字段为日期时间。日期时间格式的数据,直接调用json.dumps报TypeError,指定系统默认值函数之后,对日期的字段应用函数转换成字符串格式,序列化成功。
2 .3 .6 indent In[5]:data={ lgd :{ players :[ ame , nothingtosay , faith_bian , xinQ , y`], VG: {players: [yydpy , ori , old_eleven , pyw , dy ]}[In[6]:print(JSON .dumps(data)){ lgd :{ players :[ ame , nothingtosay , faith_bian , xinQ , y `], coach :时,设置缩进=4,数据增加换行符,数据层级以四个空格为缩进。
2 .3 .7True, In[8]:data Out[8]:{ key : value , border : lands } In[9]:JSON。dumps(data)Out[9]: { key : value , border : lands } In[10]:JSON。dumps(data,separators=(,,:::))Out[10]: {key:value , border : lands } In[11]:JSON。转储(数据,分隔符默认数据分割符为, 和: ,通过指定分隔符=(,,:)去除空格后,可以使序列化后的数据更加紧凑。甚至可以自定义连接符来倾销成自定义的数据样式。
2 .3 .8sort_keysIn[21]:data={ key : value , border: lands } In[22]:data[ data ]=data In[23]:data out[23]:{ key : value , border : lands , data: {.} } In[24]:json。转储(数据)-值错误:检测到循环引用In [25]: json.dumps(data,check _ Circular=False)-递归错误:编码数据对象时超过了最大递归深度当数据中存在对自己的递归引用时,json.dumps会报值错误,指定指定检查循环=假后,不进行循环引用检验。
总结:本文总结了大蟒内置模块数据的常用方法倾销和负荷
序列化过程中的一些参数控制总结:
无法序列化的数据,键的跳过,值使用函数转换
数据的排序,编码,非法漂浮物数据
缩进和分隔符
需要更高级的对数据数据的处理方法,参见:
处理数据数据的神器:JMESPath
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。