10000条代码Planning⑩

##JSON库

Q1:为什么需要转换为json格式

A1:json.dumps函数用于将Python对象转换为JSON格式的字符串。尽管在结果上看起来可能没有太大变化,但这个转换的意义在于:

  1. 数据交换与存储: 将Python对象转换为JSON字符串后,可以方便地进行数据的交换与存储。JSON是一种通用的数据格式,支持多种编程语言,因此可以轻松地在不同系统之间传递数据。

  2. 与Web API交互: 当与Web API进行交互时,通常需要将请求或响应中的数据以JSON格式进行编码或解码。这样可以确保数据的一致性和可读性,并简化数据的处理流程。

  3. 前后端交互: 在Web开发中,前端与后端之间的数据交换通常采用JSON格式。前端页面可以通过JavaScript将用户输入的数据转换为JSON格式后发送到后端,后端处理完数据后再将结果以JSON格式返回给前端。

  4. 配置文件: 有时候将配置信息以JSON格式保存在文件中,以便程序在需要时读取和解析。这样可以更灵活地管理配置,并且JSON格式相对于其他格式更易于人们阅读和理解。

  5. 日志记录: 有时候程序的日志信息也会以JSON格式记录,这样可以更方便地对日志进行分析和处理。

总之,使用json.dumps可以将Python对象转换为标准的JSON格式字符串,使得数据在不同系统之间的交互更加方便和高效。

#!Python 3.8.12
#Mu Editor软件

##调用json
##json.dumps语法,参数10个
"""
json.dumps(obj, skipkeys=False, ensure_ascii=True,
check_circular=True, allow_nan=True, cls=None,
indent=None, separators=None,encoding="utf-8",
default=None, sort_keys=False, **kw)
"""

##参数1:obj(对象,一般是列表或字典等数据结构)
import json
data = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ]
data1 = json.dumps(data)
print(data1)            #[{"a": 1, "b": 2, "c": 3, "d": 4, "e": 5}]
print(type(data1))      #<class 'str'>


#参数2:skipkeys(对象中包含不支持JSON格式的键时,是否跳过它们,默认False.对象为字典的时候,
#无论True还是False,字典中包含不可哈希的键,也会引发 TypeError。
#这是因为 JSON 对象的键必须是字符串类型,而不可哈希的键无法转换成字符串。)
#True
_data = {['a', 'b']: 1, 'c': 2}
data2 = json.dumps(_data,skipkeys=True)
print(data2)        #TypeError: unhashable type: 'list'
#False
data2 = json.dumps(_data,skipkeys=False)
print(data2)        #TypeError: unhashable type: 'list'


##参数3:ensure_ascii,是否所有非 ASCII 字符将会转义成 ASCII
#非 ASCII 字符:
#1.拉丁字母扩展字符:例如带有重音符号、附加符号、特殊字符的字符,如é、ñ、ß等。
#2.非拉丁字母字符:例如中文、日文、韩文、俄文等字符。
#3.符号和特殊字符:例如货币符号、数学符号、箭头、表情符号等"
#默认True
data = [ { 'aé' : 1, 'b' : 2, 'c中文' : 3, 'd' : 4, 'e' : 5 } ]
data3=json.dumps(data,ensure_ascii=True)
print(data3)        #[{"a\u00e9": 1, "b": 2, "c\u4e2d\u6587": 3, "d": 4, "e": 5}]
data3=json.dumps(data,ensure_ascii=False)
print(data3)        #[{"aé": 1, "b": 2, "c中文": 3, "d": 4, "e": 5}]


##参数4:check_circular 参数用于控制是否检测对象之间的循环引用。(没弄懂!!!)
#循环引用指的是一个对象包含对自身的引用,或者多个对象之间相互引用形成闭环。
#例子略。


##参数5:allow_nan:是否允许编码过程中包含 NaN、Infinity 和 -Infinity
#默认值:True,如果设置为 False,则存在 NaN、Infinity 和 -Infinity,会引发 ValueError。
#例子1
#True,允许特殊的浮点数值出现在 JSON 字符串中
data=[{'a':'NaN','NaN':1}]      #例子中,其实并没有真正的NaN
import json
data5=json.dumps(data,allow_nan=True)
print(data5)        #[{"a": "NaN", "NaN": 1}]
#False,不允许特殊的浮点数值出现在 JSON 字符串中
data5=json.dumps(data,allow_nan=False)
print(data5)        #[{"a": "NaN", "NaN": 1}]

#例子2
import math
data = [{'a': math.nan, 'NaN': 1}]
# allow_nan=True
data5 = json.dumps(data, allow_nan=True)
print(data5)  # [{"a": "NaN", "NaN": 1}]
# allow_nan=False,会引发异常
try:
    data5 = json.dumps(data, allow_nan=False)
    print(data5)    #Out of range float values are not JSON compliant
except ValueError as e:
    print("Error:", e)


##参数6:cls 用于自定义 JSON 编码过程的编码器类。默认为 None,表示使用内置的 JSONEncoder。


##参数7:indent 用于指定输出 JSON 字符串的缩进空格数,以使其更易读。
#如果设置为 None(默认值),则表示不进行缩进。
import json
data=[ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ]
#None
data7=json.dumps(data,indent=None)
print(data7)    #[{"a": 1, "b": 2, "c": 3, "d": 4, "e": 5}]
#字符串:'@'
data7=json.dumps(data,indent='@')
print(data7) 
"""结果:
[
@{
@@"a": 1,
@@"b": 2,
@@"c": 3,
@@"d": 4,
@@"e": 5
@}
]
"""
#数值:2
data7=json.dumps(data,indent=2)
print(data7) 
"""结果:
[
  {
    "a": 1,
    "b": 2,
    "c": 3,
    "d": 4,
    "e": 5
  }
]
"""
print(type(data7))      #<class 'str'>


##参数8:separators 用于指定 JSON 字符串中键值对之间的分隔符。默认为 (', ', ': ')。
import json
data=[ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ]
data8=json.dumps(data,separators=("中文\n",": "))
print(data8)
"""结果:
[{"a": 1中文
"b": 2中文
"c": 3中文
"d": 4中文
"e": 5}]
"""

##参数8:encoding="utf-8",一个字符串,表示用于编码 JSON 字符串的字符编码。默认为 "utf-8"。
encoding="utf-8",


##参数9:default=None 一个函数,用于在编码期间处理不支持 JSON 格式的对象。默认为 None。


##参数10:sort_keys 
#设置为 True,则表示输出的 JSON 对象的键按字母顺序排序。
#默认为 False。
import json
data=[ { 'a' : 1, 'c' : 2, 'f' : 3, 'd' : 4, 'e' : 5 } ]
#False,默认值
data10=json.dumps(data,sort_keys=False)
print(data10)        #[{"a": 1, "c": 2, "f": 3, "d": 4, "e": 5}]
#True,按字母顺序
data10=json.dumps(data,sort_keys=True)
print(data10)        #[{"a": 1, "c": 2, "d": 4, "e": 5, "f": 3}]

如果你真的想当程序员那么就先写一万条代码。……《向上生长》

18号复习写下49条代码

目标:10000条

剩余:9534条

总结:

        Json新接触,参数之多,没有什么手头上的应用,感觉很难去理解这个。不过想起《向上生长》中说的,“ “学习的能力”有两重意思,一是不惧怕学习新东西,二是知道学习曲线,能够顺利抗过学习新知识初期的挫折感。”继续前进学习,一步一个脚印。不知不觉完成了5%的进度了呢。

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值