Python使用json库

活动地址:CSDN21天学习挑战赛

Python使用json库

文章目录

  • Python使用json库
    • json简介
    • json语法基础
    • 如何使用
    • Python与json的数据类型转换
  • 参考资料

json简介

JSON: JavaScript Object Notation(JavaScript 对象表示法),是存储和交换文本信息的语法,类似 XML。JSON比 XML 更小、更快,更易解析。且易于人阅读和编写。

下面看一下json是什么样子。

{
    "sites": [
    { "name":"菜鸟教程" , "url":"www.runoob.com" }, 
    { "name":"google" , "url":"www.google.com" }, 
    { "name":"微博" , "url":"www.weibo.com" }
    ]
}

以上代码以及介绍取自菜鸟教程

json语法基础

json中有两个主要的数据类型—对象和数组。还有其他的常见数据类型:字符串(string)、数值(number)、true、false、 null。

在json的对象中,存储数据的方式就是键值对。即key:value的形式。key必须是字符串,value则可以是其他任何合法的json数据类型,包括数组和对象。

先介绍对象和数组:

  • 对象:

在json中,对象就是一对大括号{}括起来的数据。一个对象中可以包含多个键值对来描述这一对象的性质,对象中的不同键值对之间用,分隔。键值对key:value的形式。key必须是字符串,value则可以是其他任何合法的json数据类型,包括数组和对象。需要注意的是,键值对不是一种数据类型,它只能出现在对象当中。

示例如下:

{
    "name": "王二狗",
    "age": 30
}
// 由于值可以是任何数据类型,所以这里就可以进行对象的嵌套,如下:

{
    "name": "王二狗",
    "age": 30,
    "friend": {
    "name": "张三",
    "age": 20,
    }
}
  • 数组:数组使用[]来表示,用来存储值的有序集合。这里的值可以是任何合法的json数据类型。这里要注意,数组中的元素可以为不同数据类型。
["Google", "Runoob", "Taobao"]
//由于值是任意类型,所以就可以对数据进行嵌套
[
    {
    "name": "张三",
    "age": 20,
    },
    {
    "name": "王二狗",
    "age": 30,
    },
    [1, 2]
]

如何使用

主要是掌握两个函数的调用。json.dumps(),json.loads()

  • json.dumps():用于将 Python 对象编码成 JSON 字符串。

    • 语法:参数很多,记住常用的就行。
    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)
    
    • 实例:
    import json
    data = [ {'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5}]
    data2 = json.dumps(data)
    print(type(data2))
    print(data2)
    

    运行结果如下:

    <class 'str'>
    [{"a": 1, "b": 2, "c": 3, "d": 4, "e": 5}]
    
      有时,我们的json数据中会有中文,这个时候就要注意了,`json.dumps()`默认是以`ASCII`来编码。
    
data = [
    {
    "name": "张三",
    "age": 20
    },
    {
    "name": "王二狗",
    "age": 30
    }
]
data2 = json.dump2(data)
print(data2)
#运行结果如下:
[{"name": "\u5f20\u4e09", "age": 20}, {"name": "\u738b\u4e8c\u72d7", "age": 30}]
    如何解决呢?将`json.dumps()`的`ensure_ascii`参数设置为`False`。即`json.dumps(data, ensure_ascii=False)`。
# 修改后的结果
[{"name": "张三", "age": 20}, {"name": "王二狗", "age": 30}]
    其他的一些参数:`indent=None`,这个是指定缩进的空格数,`sort_keys=False`,这个控制是否对键进行排序。

    示例:
import json
data = {'b': 2, 'c': 3, 'a': 1}
data2 = json.dumps(data, indent=4, sort_keys=True)
print(data2)
    运行结果如下:可以看到,json对象中,键值对的顺序发生了改变,并且有了缩进。
{
    "a": 1,
    "b": 2,
    "c": 3
}
  • json.loads():这个方法就是将json字符串对象转换为python中的数据类型。

    • 示例:这个方法一般不需要设置其他参数,直接使用即可,如果有需要可以查阅相关资料。

    • import json
      data_str = '{"name": "Ruby"}'
      data = json.loads(data_str)
      print(type(data))
      print(data)
      
      #输出结果如下:
      <class 'dict'>
      {'name': 'Ruby'}
      

Python与json的数据类型转换

解码时:

JSON Python
object dict
array list
string str
number (int) int
number (real) float
true True
false False
null None

编码时:

Python JSON
dict object
list, tuple array
str string
int, float, int- & float-derived Enums number
True true
False false
None null

参考资料

  • json — JSON encoder and decoder — Python 3.10.6 documentation

  • (6条消息) 100天精通Python(进阶篇)——第35天:json标准库大总结_无 羡ღ的博客-CSDN博客

  • https://www.runoob.com/json/json-tutorial.html

你可能感兴趣的:(python,python,json)