JSON的学习使用

文章目录

  • 笔记来源
  • 一、使用 json 保存结构化数据
  • 二、基本使用
    • 2.1 基础讲解
    • 2.2 实例引入⭐
  • 总结


笔记来源

  1. 菜鸟教程:Python JSON
  2. Python json 模块dumps、dump、loads、load的使用
  3. 官方文档:
    • 7.2.2. 使用 json 保存结构化数据
    • json — JSON 编码和解码器

一、使用 json 保存结构化数据

json 标准模块采用 Python 数据层次结构,并将之转换为字符串表示形式的过程称为 serializing (序列化)
从字符串表示中重建数据称为 deserializing (解序化)
在序列化和解序化之间,表示对象的字符串可能已经存储在文件或数据中,或通过网络连接发送到远方 的机器。

>>> import json
>>> result_json = json.dumps([1, 'simple', 'list'])
>>> print(result_json)
'[1, "simple", "list"]'
>>> type(result_json)
<class 'str'>

二、基本使用

2.1 基础讲解

  • json.dump

json.dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)

  • 注意事项
  • 使用这个 转换表 将 obj 序列化为 JSON 格式化流形式的 fp (支持 .write() 的 file-like object)。
  • json 模块始终产生str 对象而非 bytes 对象。因此,fp.write() 必须支持 str 输入
  • 如果 ensure_ascii 是 true (即默认值),输出保证将所有输入的非 ASCII 字符转义。如果 ensure_ascii 是 false,这些字符会原样输出。
  • 如果 indent 是一个非负整数或者字符串,那么 JSON 数组元素和对象成员会被美化输出为该值指定的缩进等级。
    如果缩进等级为零、负数或者 “”,则只会添加换行符。 None (默认值) 选择最紧凑的表达。 使用一个正整数会让每一层缩进同样数量的空格。 如果 indent 是一个字符串 (比如 “\t”),那个字符串会被用于缩进每一层。
    当指定时,separators 应当是一个 (item_separator, key_separator) 元组。当 indent 为 None 时,默认值取 (’, ', ‘: ‘),否则取 (’,’, ': ')。为了得到最紧凑的 JSON 表达式,你应该指定其为 (',', ':') 以消除空白字符。
  • 如果 sort_keys 是 true(默认为 False),那么字典的输出会以键的顺序排序。
# json.dump的使用在 爬虫入门概念与硬核实战巩固(一) 博客中有
    fp = open('./douban.json','w',encoding='utf8')
    json.dump(list_data,fp,ensure_ascii=False)
  • json.dumps

使用这个 转换表 将 obj 序列化为 JSON 格式的 str
[即将 Python 对象编码成 JSON 字符串]
其参数的含义与 dump() 中的相同

import json

data = [ {
      'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ]
--------------------------①-------------------------
data2 = json.dumps({
     'a': 'Runoob', 'b': 7}, sort_keys=True, indent=4, separators=(',', ': '))
print(data2)

{
     
    "a": "Runoob",
    "b": 7
}
--------------------------②-------------------------
>>> data = [ {
      'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ]
>>> data2 = json.dumps({
     'a': 'Runoob', 'b': 7}, sort_keys=True, indent=0, separators=(',', ': '))
>>> print(data2)

{
     
"a": "Runoob",
"b": 7
}
--------------------------③-------------------------
>>> data2 = json.dumps({
     'a': 'Runoob', 'b': 7}, sort_keys=True, indent=-9, separators=(',', ': '))
>>> print(data2)
{
     
"a": "Runoob",
"b": 7
}
--------------------------④-------------------------
>>> data2 = json.dumps({
     'a': 'Runoob', 'b': 7}, sort_keys=True, indent="", separators=(',', ': '))
>>> print(data2)
{
     
"a": "Runoob",
"b": 7
}

注解 :JSON 中的键-值对中的键永远是 str 类型的。当一个对象被转化为 JSON 时,字典中所有的键都会被强制转换为字符串。这所造成的结果是字典被转换为 JSON 然后转换回字典时可能和原来的不相等。
换句话说,如果 x 具有非字符串的键,则有 loads(dumps(x)) != x

JSON的学习使用_第1张图片

  • json.load

json.load(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

json.load的用法与json.dump的用法想法,一个是写(dump),一个是读(load)

使用这个 转换表 将 fp (一个支持 .read() 并包含一个 JSON 文档的 text file 或者 binary file) 反序列化为一个 Python 对象

  • json.loads

使用这个 转换表 将 s (一个包含 JSON 文档的 str, bytes 或 bytearray 实例) 反序列化为 Python 对象
[用于解码 JSON 数据。该函数返回 Python 字段的数据类型]
其他参数的含义与 load() 中的相同。

import json

jsonData = '{"a":1,"b":2,"c":3,"d":4,"e":5}'

text = json.loads(jsonData)
print(text)
{
     'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}

>>> type(text)
<class 'dict'>

JSON的学习使用_第2张图片

2.2 实例引入⭐

原文链接:Python json 模块dumps、dump、loads、load的使用【若有侵权,联系删除–仅限于该节

  • json.dumps

json.dumps 将python对象格式化成json字符

str={
     'article':'哈哈哈哈哈哈哈哈','tag':'呵呵呵呵呵呵'}

# 将python对象格式化成json字符串
encoded_json=json.dumps(str,ensure_ascii=False)
print(encoded_json,type(encoded_json))

输出如下:

{
     "article": "哈哈哈哈哈哈哈哈", "tag": "呵呵呵呵呵呵"} <class 'str'>
  • json.loads

json.loads 将json字符串解码成python对象

# 将json字符串解码成python对象
decode_json=json.loads(encoded_json)
print(decode_json,type(decode_json))

输出如下:

{
     'article': '哈哈哈哈哈哈哈哈', 'tag': '呵呵呵呵呵呵'} <class 'dict'>
  • json.dump

json.dump 主要用来将python对象写入json文件

# json.dump主要用来将python对象写入json文件
f = open('demo.json','w',encoding='utf-8')
json.dump(decode_json,f,ensure_ascii=False)
f.close()

结果如下:
在这里插入图片描述

  • json.load

json.load 加载json格式文件,返回python对象

# json.load加载json格式文件,返回python对象
f = open('demo.json','r',encoding='utf-8')
data = json.load(f)
print(data,type(data))
f.close()

输出如下:

{
     'article': '哈哈哈哈哈哈哈哈', 'tag': '呵呵呵呵呵呵'} <class 'dict'>
  • 完整代码
import json

str={
     'article':'哈哈哈哈哈哈哈哈','tag':'呵呵呵呵呵呵'}
# 将python对象格式化成json字符串
encoded_json=json.dumps(str,ensure_ascii=False)
print(encoded_json,type(encoded_json))

# 将json字符串解码成python对象
decode_json=json.loads(encoded_json)
print(decode_json,type(decode_json))

# json.dump主要用来将python对象写入json文件
f = open('demo.json','w',encoding='utf-8')
json.dump(decode_json,f,ensure_ascii=False)
f.close()

# json.load加载json格式文件,返回python对象
f = open('demo.json','r',encoding='utf-8')
data = json.load(f)
print(data,type(data))
f.close()

总结

先记录到这里,官方文档中的用法是所有关于python的,我这里只记录了平时碰到的使用,后期遇到新的,还会增加新的章节。

你可能感兴趣的:(#,python爬虫,python,json,字符串)