在这里插入图片描述

Python 标准库之 json 编码和解码器

文章目录

  • Python 标准库之 json 编码和解码器
    • 一、Python json库介绍
    • 二、导入 json 库
    • 三、Python对应JSON数据类型
    • 四、基本使用「重点」🧊
      • 1、序列化操作
      • 2、反序列化操作
    • 五、编码器和解码器🥃
    • 六、异常🧃
    • 参考资料💖
    • 相关博客😋


一、Python json库介绍

JSON(JavaScript Object Notation)是由道格拉斯·克罗克福特构想和设计的一种轻量级资料交换格式。其内容由属性和值所组成,因此也有易于阅读和处理的优势。JSON是独立于编程语言的资料格式,其不仅是JavaScript的子集,也采用了C语言家族的习惯用法,目前也有许多编程语言都能够将其解析和字符串化,其广泛使用的程度也使其成为通用的资料格式。

Python 的 json 库提供了对 json 序列化的支持,与标准库 marshalpickle 相似的API接口。


二、导入 json 库

在看下列内容前,别忘记导入 json 标准库呀

import json

三、Python对应JSON数据类型

1)、JSON 到 Python 数据类型的转换

JSON 数据格式To Python 数据格式
objectdict
arraylist
stringstr
number (int)int
number (real)float
trueTrue
falseFalse
nullNone

2)、Python 到 JSON 数据类型的转换

Python 数据格式To JSON 数据格式
dictobject
list, tuplearray
strstring
int, float, int 和 float 派生的枚举number
Truetrue
Falsefalse
Nonenull

3)、源码查阅

在 JSON 标准库的编码器和解码器源码里,能看到对转换类型的注释

JSONEncoder

class JSONEncoder(object):"""Extensible JSON <http://json.org> encoder for Python data structures.Supports the following objects and types by default:+-------------------+---------------+| Python            | JSON          |+===================+===============+| dict              | object        |+-------------------+---------------+| list, tuple       | array         |+-------------------+---------------+| str               | string        |+-------------------+---------------+| int, float        | number        |+-------------------+---------------+| True              | true          |+-------------------+---------------+| False             | false         |+-------------------+---------------+| None              | null          |+-------------------+---------------+To extend this to recognize other objects, subclass and implement a``.default()`` method with another method that returns a serializableobject for ``o`` if possible, otherwise it should call the superclassimplementation (to raise ``TypeError``)."""pass

JSONDecoder

class JSONDecoder(object):"""Simple JSON <http://json.org> decoderPerforms the following translations in decoding by default:+---------------+-------------------+| JSON          | Python            |+===============+===================+| object        | dict              |+---------------+-------------------+| array         | list              |+---------------+-------------------+| string        | str               |+---------------+-------------------+| number (int)  | int               |+---------------+-------------------+| number (real) | float             |+---------------+-------------------+| true          | True              |+---------------+-------------------+| false         | False             |+---------------+-------------------+| null          | None              |+---------------+-------------------+It also understands ``NaN``, ``Infinity``, and ``-Infinity`` astheir corresponding ``float`` values, which is outside the JSON spec."""pass

四、基本使用「重点」🧊

1、序列化操作

1)、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 格式化流形式并存储到 文件,需要注意的是 json 模块始终返回的是 str 字符串对象,因此在将 JSON 读写文件时应以文本模式操作,在序列化操作时应确保 fp.write 支持 str 写入。

参数如下:

  • obj: 需要被序列化的对象
  • fp: 传入一个拥有 .write() 写入方法的文件对象,比如 file-like object,需要注意的是应传入一个文本模式的文件对象,并且编码应当是 UTF-8 , UTF-16 或者 UTF-32 。
  • skipkeys:在为 True 时(默认为 False)跳过不是基本对象(包括 str, intfloatboolNone)字典的键,否则引发一个 TypeError 异常。
  • ensure_ascii:在为 True 时(默认为 True),输出保证将所有输入的非 ASCII 字符转义。如果 ensure_ascii 是 false,这些字符会原样输出。
  • check_circular:检查循环。如果为 False(默认为 True),那么容器类型的循环引用检验会被跳过并且循环引用回引发一个 OverflowError (或者更糟的情况)。
  • allow_nan:数据类型之间的转换遵守。如果为 False(默认为 True),那么在对严格 JSON 规格范围外的 float 类型值(naninf-inf)进行序列化时会引发一个 ValueError 异常。如果为 True,则使用它们的 JavaScript 等价形式(NaNInfinity-Infinity)。
  • cls:JSON 编码器的类别,默认使用自带的 JSONEncoder。如果想使用自定义的 JSON 编码器,比如说 JSONEncoder 子类,通过此参数实现。
  • indent: 控制缩进内容。
    a、 默认值为 None 会选择最紧凑的表达,即一行数据。
    b、 如果 indent 是一个非负整数或者字符串,那么 JSON 数组元素和对象成员会被美化输出为该值指定的缩进内容,使用一个正整数会让每一层缩进同样数量的空格。
      如果indent是 4 那么将会以4个空格做完每一层的缩进,indent 是一个字符串 (比如 “\t”),那个字符串会被用于缩进每一层。
    c、 如果缩进等级为零、负数或者 "",则只会添加换行符,在每个缩进前都不会有字符。
  • separators: 分割字符,因为用两种分割字符,所以应该是一个 (item_separator, key_separator) 元组(项分割字符,键分割字符)。
      但因为缩进参数 indent 的存在,separators 的默认值会有两种变化,当 indentNone 时,会使用紧凑的一行表达,这时候的分割符会取值 (', ', ': ') 在每个分割符后都有空格,而相反在不为 None 时会取值 (',', ':')
      小技巧:为了得到最紧凑的 JSON 表达式,在 indent 为None 的情况下,可以手动将 separators 取值为 (',', ':'),也就是不留空格。
  • default: 被指定时,其应该是一个函数,每当某个对象无法被序列化时它会被调用,此函数接受一个参数,这个参数就是无法被序列化的对象。
    它应该返回该对象的一个可以被 JSON 编码的版本或者引发一个 TypeError。如果没有被指定,则会直接引发 TypeError
  • sort_keys:如果为 True(默认为 False),那么字典的输出会以键的顺序排序。

具体讲解:

  • 取消非ASCII编码转义

    在将 JSON 编码的数据存储到文件或是进行编码返回时,很容易发现除了ASCII字符都发生了转义,变成了Unicode的转义字符,最典型的例子就是中文字符。

    # -*- coding: utf-8 -*-
    import json
    from pathlib import PathBASE_DIR = Path(__file__).parenthapply_new_year = {"年份": 2022, "生肖": "虎", "祝福语": "在这美丽的春节之际,祝福各位朋友在新的一年里,天天都有份好心情!", "春节快乐": None
    }
    # 文件路径
    file_path = BASE_DIR / "test.json"# 打印输出到控制台
    print(json.dumps(happly_new_year))
    # 输出存储到文件
    with file_path.open("w", encoding="utf-8") as f_w:json.dump(happly_new_year, fp=f_w)
    

    控制台输出 与 输出到文件

    {"\u5e74\u4efd": 2022, "\u751f\u8096": "\u864e", "\u795d\u798f\u8bed": "\u5728\u8fd9\u7f8e\u4e3d\u7684\u6625\u8282\u4e4b\u9645\uff0c\u795d\u798f\u5404\u4f4d\u670b\u53cb\u5728\u65b0\u7684\u4e00\u5e74\u91cc\uff0c\u5929\u5929\u90fd\u6709\u4efd\u597d\u5fc3\u60c5!", "\u6625\u8282\u5feb\u4e50": null}
    

    那么对其进行 JSON 编码时如何取消发生的非 ASCII 字符转义,让这些字符会原样输出呢?答案很简单,在每次编码时将 ensure_ascii 参数设置为 Flase 即可。

    上部分的代码保持不变,只是添加ensure_ascii参数

    ......# 打印输出到控制台
    print(json.dumps(happly_new_year, ensure_ascii=False))
    # 输出存储到文件with file_path.open("w", encoding="utf-8") as f_w:json.dump(happly_new_year, fp=f_w, ensure_ascii=False)
    

    控制台输出 与 输出到文件

    {"年份": 2022, "生肖": "虎", "祝福语": "在这美丽的春节之际,祝福各位朋友在新的一年里,天天都有份好心情!", "春节快乐": null}
    
  • JSON 数据格式化

    每次输出的 JSON 数据都是一行显示的,在数据量比较少的情况下还能阅读,当数据量一旦多起来后阅读体验上就没那么好了。JSON 本身就是一种注重数据结构化的格式,在维护调试时可以充分发挥其优点,对其进行格式化就是一种常见手段。
    将其进行格式化返回需要使用到 indent 参数,indent 参数的作用在参数讲解部分有将,这边咱们对这个参数作用进行展示。

    以四个空格为缩进

    # -*- coding: utf-8 -*-
    import json
    from pathlib import PathBASE_DIR = Path(__file__).parenthapply_new_year = {"年份": 2022, "生肖": "虎","祝福语": "在这美丽的春节之际,祝福各位朋友在新的一年里,天天都有份好心情!","春节快乐": None
    }
    # 文件路径
    file_path = BASE_DIR / "test.json"# 打印输出到控制台
    print(json.dumps(happly_new_year, indent=4, ensure_ascii=False))
    # 输出存储到文件
    with file_path.open("w", encoding="utf-8") as f_w:json.dump(happly_new_year, fp=f_w, indent=4, ensure_ascii=False)
    
    {"年份": 2022,"生肖": "虎","祝福语": "在这美丽的春节之际,祝福各位朋友在新的一年里,天天都有份好心情!","春节快乐": null
    }
    

    以两个空格为缩进

    ......# 打印输出到控制台
    print(json.dumps(happly_new_year, indent=2, ensure_ascii=False))
    # 输出存储到文件
    with file_path.open("w", encoding="utf-8") as f_w:json.dump(happly_new_year, fp=f_w, indent=2, ensure_ascii=False)
    
    {"年份": 2022,"生肖": "虎","祝福语": "在这美丽的春节之际,祝福各位朋友在新的一年里,天天都有份好心情!","春节快乐": null
    }
    
  • default 参数的妙用

    default 其实是一个很方便的参数,向这个参数传入一个处理自定义对象的函数,就能够将这些自定义对象转义成可以被 JSON 编码的版本,而不需要在将数据序列化前还要手动转义 JSON 编码器无法解析的数据源。

    有一个水果类,为每一种水果都新建一个对象,每个对象中都有一个方法可以将其转义成可以被 JSON 编码版本的方法,需要做的是在每次序列化时都能正确调用这个方法将其转义。这时 default 这个参数就派上用场了,传入 default 的函数要做两件事,如果是水果类的对象那就将其转义,如果不是则抛出异常。

    # -*- coding: utf-8 -*-
    import json
    from pathlib import PathBASE_DIR = Path(__file__).parentclass Fruits:"""水果类"""def __init__(self, name, price):self.name = nameself.price = pricedef __str__(self):return f"水果类型:{self.name},售价:{self.price}"def todict(self):"""将水果信息转换成字典格式输出"""return {"水果": self.name, "售价": self.price}def obj_to_json(obj):"""对象转为JSON能编码函数Args:obj: 自定义对象Returns:能够被JSON编码的版本数据Raises:如果不是目标类别的对象将抛出TypeError异常"""if isinstance(obj, Fruits):return obj.todict()raise TypeError(f"Object of type {obj.__name__} is not JSON serializable")pear = Fruits("梨子", 3.3)
    apple = Fruits("苹果", 5.6)
    banana = Fruits("香蕉", 11.6)
    orange = Fruits("橙子", 6.6)fruits = [pear, apple, banana, orange]
    # 文件路径
    file_path = BASE_DIR / "test.json"with file_path.open("w", encoding="utf-8") as f_w:json.dump(fruits, fp=f_w, default=obj_to_json, ensure_ascii=False)
    

    JSON 数据

    [{"水果": "梨子", "售价": 3.3}, {"水果": "苹果", "售价": 5.6}, {"水果": "香蕉", "售价": 11.6}, {"水果": "橙子", "售价": 6.6}]
    

2)、json.dumps(obj, *, 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 格式的 str 对象并返回,不会进行文件式存储

除了缺少用于存储到文件的 fp 参数外,其它参数的含义与 json.dump() 中的相同,因此用法也是一样的,只不过一个是存储到文件,一个是直接返回 JSON 编码数据,这里不过多讲解

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

2、反序列化操作

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

fp (一个支持 .read() 并包含一个 JSON 文档的 text file 或者 binary file) 反序列化为一个 Python 对象。

参数如下:

  • fp: 传入一个拥有 .read() 写入方法的文件对象,该文件对象应是 text file(文本对象)或 binary file(二进制对象),对于二进制对象输入编码应当是 UTF-8 , UTF-16 或者 UTF-32。
  • cls:JSON 解码器的类别,默认使用自带的 JSONDecoder。如果想使用自定义的 JSON 解码器,比如说 JSONDecoder 子类,通过此参数实现。额外的关键词参数会通过类的构造函数传递。
  • object_hook: 被指定时,其应该是一个函数。它会被调用于每一个解码出的对象字面量(一个 dict、一个基本类型对象),此函数接受一个参数,这个参数就是每一个解码出的对象字面量。
    该函数的返回值会取代原本的 dict,简单来说就是该函数负责把反序列化后的基本类型对象转换成自定义类型的对象。这一特性能够被用于实现自定义解码器(如 JSON-RPC 的类型提示)。
  • parse_float:解析浮点数。如果指定,将与每个要解码 JSON 浮点数的字符串一同调用。其应该是一个函数,同时接收一个参数,这个参数是每一个 JSON 浮点数的字符串。默认状态下,相当于 float(num_str)
    可以用于对 JSON 浮点数使用其它数据类型和语法分析程序 (比如 decimal.Decimal )。
  • parse_int:解析整数。如果指定,将与每个要解码 JSON 整数的字符串一同调用。其应该是一个函数,同时接收一个参数,这个参数是每一个 JSON 整数的字符串。默认状态下,相当于 int(num_str)
    可以用于对 JSON 整数使用其它数据类型和语法分析程序 (比如 float )。
  • parse_constant:解析常量。如果指定,将要与以下字符串中的一个一同调用:'-Infinity''Infinity''NaN'。其应该是一个函数,同时接收一个参数,这个参数是每一个 JSON 整数的字符串。如果遇到无效的 JSON 数字则可以使用它引发异常。
  • object_pairs_hook: 它会被调用于每一个有序列表对解码出的对象字面量,这个参数与 object_hook 参数功能相同,与 object_hook 参数不同点是给 object_pairs_hook 的解码的键值对列表是有序的,一些依赖键值对顺序的功能可以用 object_pairs_hook 参数,而不用 object_hook
    如果 object_hook 也被定义,object_pairs_hook 优先。

具体讲解:

  • JSON 浮点数处理

    parse_float 参数用于控制 JSON 浮点数转化为 Python 数据类型时的操作,默认是对其转化为浮点数类型 float(num_str),浮点数还能做的处理,比如四舍五入,向上向下取整,转化为decimal.Decimal等,这些都能直接靠 parse_float 参数实现。

    # -*- coding: utf-8 -*-
    import math
    import json
    from pathlib import Path
    from decimal import DecimalBASE_DIR = Path(__file__).parent
    # 文件路径
    file_path = BASE_DIR / "test.json"def json_ceil(dic):"""将json浮点数向上取整辅助函数"""return math.ceil(float(dic))def json_floor(dic):"""将json浮点数向下取整辅助函数"""return math.floor(float(dic))def json_round(dic):"""将json浮点数四舍五入取整辅助函数"""return round(float(dic))def float_to_decimal(dic):"""将json浮点数转化Decimal辅助函数"""return Decimal.from_float(float(dic)).......
    

    源 JSON 数据

    [{"水果": "梨子", "售价": 3.3}, {"水果": "苹果", "售价": 5.6}, {"水果": "香蕉", "售价": 11.6}, {"水果": "橙子", "售价": 6.6}]
    

    向上取整

    ......with file_path.open("r", encoding="utf-8") as f_r:print(json.load(f_r, parse_float=json_ceil))
    
    [{'水果': '梨子', '售价': 4}, {'水果': '苹果', '售价': 6}, {'水果': '香蕉', '售价': 12}, {'水果': '橙子', '售价': 7}]
    

    向下取整

    ......with file_path.open("r", encoding="utf-8") as f_r:print(json.load(f_r, parse_float=json_floor))
    
    [{'水果': '梨子', '售价': 3}, {'水果': '苹果', '售价': 5}, {'水果': '香蕉', '售价': 11}, {'水果': '橙子', '售价': 6}]
    

    四舍五入取整

    ......with file_path.open("r", encoding="utf-8") as f_r:print(json.load(f_r, parse_float=json_round))
    
    [{'水果': '梨子', '售价': 3}, {'水果': '苹果', '售价': 6}, {'水果': '香蕉', '售价': 12}, {'水果': '橙子', '售价': 7}]
    

    转化为Decimal类型

    ......with file_path.open("r", encoding="utf-8") as f_r:print(json.load(f_r, parse_float=float_to_decimal))
    
    [{'水果': '梨子', '售价': Decimal('3.29999999999999982236431605997495353221893310546875')}, {'水果': '苹果', '售价': Decimal('5.5999999999999996447286321199499070644378662109375')}, {'水果': '香蕉', '售价': Decimal('11.5999999999999996447286321199499070644378662109375')}, {'水果': '橙子', '售价': Decimal('6.5999999999999996447286321199499070644378662109375')}]
    
  • JSON 整数处理
    在解析 JSON 整数字符串时,默认是将其转化为整数类型 int(num_str),可以将其转化为浮点数类型,直接靠 parse_float 参数实现。

    # -*- coding: utf-8 -*-
    import math
    import json
    from pathlib import Path
    from decimal import DecimalBASE_DIR = Path(__file__).parent
    file_path = BASE_DIR / "test.json"with file_path.open("r", encoding="utf-8") as f_r:print(json.load(f_r, parse_int=float))
    

    源 JSON 数据

    {"祝福语": "新春快乐!", "祝你": 1314}
    

    程序打印

    {'祝福语': '新春快乐!', '祝你': 1314.0}
    
  • object_hook 与 object_pairs_hook 的应用
    object_hook 参数与 object_pairs_hook 参数功能都是一致的,但在编写函数时,函数接受的参数不同。对于 object_hook 参数,传入的是每一个解码出来最基本的类型对象,即每次传入都是 dict 字典数据类型。对于 object_pairs_hook 参数,传入的是每一个解码出来的列表嵌套元组类型 [(key, value), ] ,相当于调用了字典的 .items() 方法。

    颁奖排序算是一个典型例子,以数字1、2、3…为颁奖奖次的依据,分别使用 object_hook 参数与 object_pairs_hook 参数进行示例。

    # -*- coding: utf-8 -*-
    import jsons_data = '''{"3": ["第三名", "王汗"], "1": ["第一名", "王小明"], "2": ["第二名", "小明"],"4": ["第四名", "李华"], "5": ["第五名", "李大川"], "6": ["第六名", "xianzhe_"]
    }'''# 使用 object_hook 参数
    json.loads(s_data, object_hook=lambda x: print(f"类型:{type(x)},内容:{x}"))
    # 使用 object_pairs_hook 参数
    json.loads(s_data, object_pairs_hook=lambda x: print(f"类型:{type(x)},内容:{x}"))
    
    "类型:<class 'dict'>,内容:{'3': ['第三名', '王汗'], '1': ['第一名', '王小明'], '2': ['第二名', '小明'], '4': ['第四名', '李华'], '5': ['第五名', '李大川'], '6': ['第六名', 'xianzhe_']}"
    "类型:<class 'list'>,内容:[('3', ['第三名', '王汗']), ('1', ['第一名', '王小明']), ('2', ['第二名', '小明']), ('4', ['第四名', '李华']), ('5', ['第五名', '李大川']), ('6', ['第六名', 'xianzhe_'])]"
    

    可以看到 object_pairs_hook 并没有返回一个有序列表,而是和 object_hook 一样的顺序,我的猜测是因为程序内部并不知道排序的依据是什么,但其实 object_pairs_hook 传入的参数是列表,那么自己手动指定排序即可

    根据Key键值的排序返回

    # -*- coding: utf-8 -*-
    import jsons_data = '''{"3": ["第三名", "王汗"], "1": ["第一名", "王小明"], "2": ["第二名", "小明"],"4": ["第四名", "李华"], "5": ["第五名", "李大川"], "6": ["第六名", "xianzhe_"]
    }'''def sort_hook(dic):"""将Json解码结果排序辅助函数如果是object_hook参数使用将直接返回Args:dic: 最基本的类型对象"""if isinstance(dic, list):dic.sort(key=lambda i: i[0])return dicelse:return dic# 使用 object_hook 参数
    print(json.loads(s_data, object_hook=sort_hook))
    # 使用 object_pairs_hook 参数
    print(json.loads(s_data, object_pairs_hook=sort_hook))
    
    {'3': ['第三名', '王汗'], '1': ['第一名', '王小明'], '2': ['第二名', '小明'], '4': ['第四名', '李华'], '5': ['第五名', '李大川'], '6': ['第六名', 'xianzhe_']}
    [('1', ['第一名', '王小明']), ('2', ['第二名', '小明']), ('3', ['第三名', '王汗']), ('4', ['第四名', '李华']), ('5', ['第五名', '李大川']), ('6', ['第六名', 'xianzhe_'])]
    

    两个参数同时存在的情况下,object_pairs_hook 优先级更高

    # -*- coding: utf-8 -*-
    import jsons_data = '''{"3": ["第三名", "王汗"], "1": ["第一名", "王小明"], "2": ["第二名", "小明"],"4": ["第四名", "李华"], "5": ["第五名", "李大川"], "6": ["第六名", "xianzhe_"]
    }'''def hook(dic):if isinstance(dic, list):return "object_pairs_hook优先"else:return "object_hook优先"print(json.loads(s_data, object_hook=hook, object_pairs_hook=hook))
    
    object_pairs_hook优先
    

2)、json.loads(s, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

将JSON 编码的 s 字符串对象反序列化为一个 Python 对象。

json.loads() 不同的是,不需要从一个文件对象走获取 JSON 编码数据,而是直接传入一个 JSON 编码的字符串对象,其它参数的含义与 json.loads() 中的相同,因此用法也是一样的,这里不过多讲解。

参数如下:

  • s: 其实就是 str 的缩写,传入需要反 JSON 序列化的字符串对象

注解:如果反序列化的数据不是有效 JSON 文档,引发 JSONDecodeError 错误。


五、编码器和解码器🥃

1)、class json.JSONDecoder(*, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, strict=True, object_pairs_hook=None)

Python 实现 JSON 解码的重要组成部分,一个简单的 JSON 解码器。
在调用反序列化 json.load()json.loads() 方法时,传入的参数大部分实则传给了解码器,这也是参数名一致的原因。
同时将JSON 的 NaNInfinity-Infinity 理解为 Python 对应的 float 值。

源码:

通过查看源码可以看到,JSON 的反序列化方法实则是调用了 JSONDecoder 解码器。

部分源码

	......if cls is None:cls = JSONDecoderif object_hook is not None:kw['object_hook'] = object_hookif object_pairs_hook is not None:kw['object_pairs_hook'] = object_pairs_hookif parse_float is not None:kw['parse_float'] = parse_floatif parse_int is not None:kw['parse_int'] = parse_intif parse_constant is not None:kw['parse_constant'] = parse_constantreturn cls(**kw).decode(s)

参数如下:

解码器的参数功能大部分与反序列化 json.load()json.loads() 方法一致。

  • object_hook: 被指定时,其应该是一个函数。它会被调用于每一个解码出的对象字面量(一个 dict、一个基本类型对象),此函数接受一个参数,这个参数就是每一个解码出的对象字面量。
    该函数的返回值会取代原本的 dict,简单来说就是该函数负责把反序列化后的基本类型对象转换成自定义类型的对象。这一特性能够被用于实现自定义解码器(如 JSON-RPC 的类型提示)。
  • parse_float: 解析浮点数。如果指定,将与每个要解码 JSON 浮点数的字符串一同调用。其应该是一个函数,同时接收一个参数,这个参数是每一个 JSON 浮点数的字符串。默认状态下,相当于 float(num_str)
  • parse_int: 解析整数。如果指定,将与每个要解码 JSON 整数的字符串一同调用。其应该是一个函数,同时接收一个参数,这个参数是每一个 JSON 整数的字符串。默认状态下,相当于 int(num_str)
  • parse_constant:解析常量。如果指定,将要与以下字符串中的一个一同调用:'-Infinity''Infinity''NaN'。其应该是一个函数,同时接收一个参数,这个参数是每一个 JSON 整数的字符串。如果遇到无效的 JSON 数字则可以使用它引发异常。
  • strict:严格模式。如果为 False(默认为 True),那么控制字符将被允许在字符串内。在此上下文中的控制字符编码在范围 0–31 内的字符,包括 '\t' (制表符), '\n''\r''\0'
  • object_pairs_hook: 它会被调用于每一个有序列表对解码出的对象字面量,这个参数与 object_hook 参数功能相同,与 object_hook 参数不同点是给 object_pairs_hook 的解码的键值对列表是有序的,一些依赖键值对顺序的功能可以用 object_pairs_hook 参数,而不用 object_hook
    如果 object_hook 也被定义,object_pairs_hook 优先。

方法功能

  • decode(s)
    返回参数 s 的 Python 表示形式,参数 s 是包含一个 JSON 文档的字符串 str 实例。

  • raw_decode(s)
    原始解码数据。从参数 s 中解码出 JSON 文档(以 JSON 文档开头的一个 str 对象)并返回一个 Python 表示形式为 2 元组以及指明该文档在 s 中结束位置的序号。
    这可以用于从一个字符串解码JSON文档,该字符串的末尾可能有无关的数据。

2)、class json.JSONEncoder(*, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, sort_keys=False, indent=None, separators=None, default=None)

Python 实现 JSON 解码的重要组成部分,用于Python数据结构的可扩展JSON编码器。
在调用序列化 json.dump()json.dumps() 方法时,传入的参数大部分实则传给了解码器,这也是参数名一致的原因。

为了将其拓展至识别其他对象,需要子类化并实现 default() 方法于另一种返回 o 的可序列化对象的方法如果可行,否则它应该调用超类实现(来引发 TypeError )。

源码:

通过查看源码可以看到,JSON 的反序列化方法实则是调用了 JSONDecoder 解码器。

部分源码

	......# cached encoderif (not skipkeys and ensure_ascii andcheck_circular and allow_nan andcls is None and indent is None and separators is None anddefault is None and not sort_keys and not kw):return _default_encoder.encode(obj)if cls is None:cls = JSONEncoderreturn cls(skipkeys=skipkeys, ensure_ascii=ensure_ascii,check_circular=check_circular, allow_nan=allow_nan, indent=indent,separators=separators, default=default, sort_keys=sort_keys,**kw).encode(obj)

参数如下:

  • skipkeys:在为 True 时(默认为 False)跳过不是基本对象(包括 str, intfloatboolNone)字典的键,否则引发一个 TypeError 异常。
  • ensure_ascii: 在为 True 时(默认为 True),输出保证将所有输入的非 ASCII 字符转义。如果 ensure_ascii 是 false,这些字符会原样输出。
  • check_circular:检查循环。如果为 False(默认为 True),那么容器类型的循环引用检验会被跳过并且循环引用回引发一个 OverflowError (或者更糟的情况)。
  • allow_nan: 数据类型之间的转换遵守。如果为 False(默认为 True),那么在对严格 JSON 规格范围外的 float 类型值(naninf-inf)进行序列化时会引发一个 ValueError 异常。如果为 True,则使用它们的 JavaScript 等价形式(NaNInfinity-Infinity)。
  • sort_keys:在为 True 时(默认为 False)跳过不是基本对象(包括 str, intfloatboolNone)字典的键,否则引发一个 TypeError 异常。
  • indent: 控制缩进内容。
    a、 默认值为 None 会选择最紧凑的表达,即一行数据。
    b、 如果 indent 是一个非负整数或者字符串,那么 JSON 数组元素和对象成员会被美化输出为该值指定的缩进内容,使用一个正整数会让每一层缩进同样数量的空格。
      如果indent是 4 那么将会以4个空格做完每一层的缩进,indent 是一个字符串 (比如 “\t”),那个字符串会被用于缩进每一层。
    c、 如果缩进等级为零、负数或者 "",则只会添加换行符,在每个缩进前都不会有字符。
  • separators: 分割字符,因为用两种分割字符,所以应该是一个 (item_separator, key_separator) 元组(项分割字符,键分割字符)。
      但因为缩进参数 indent 的存在,separators 的默认值会有两种变化,当 indentNone 时,会使用紧凑的一行表达,这时候的分割符会取值 (', ', ': ') 在每个分割符后都有空格,而相反在不为 None 时会取值 (',', ':')
      小技巧:为了得到最紧凑的 JSON 表达式,在 indent 为None 的情况下,可以手动将 separators 取值为 (',', ':'),也就是不留空格。
  • default: 被指定时,其应该是一个函数,每当某个对象无法被序列化时它会被调用,此函数接受一个参数,这个参数就是无法被序列化的对象。
    它应该返回该对象的一个可以被 JSON 编码的版本或者引发一个 TypeError。如果没有被指定,则会直接引发 TypeError

方法功能

  • default(o)
    在子类中实现这种方法使其返回 o 的可序列化对象,或者调用基础实现(引发 TypeError )。

    比如说,为了支持任意迭代器,你可以像这样实现默认设置:

    def default(self, o):try:iterable = iter(o)except TypeError:passelse:return list(iterable)# Let the base class default method raise the TypeErrorreturn json.JSONEncoder.default(self, o)
    encode(o)
    

    返回 Python o 数据结构的 JSON 字符串表达方式。例如:

    >>> json.JSONEncoder().encode({"foo": ["bar", "baz"]})
    '{"foo": ["bar", "baz"]}'
    
  • iterencode(o)
    编码给定对象 o ,并且让每个可用的字符串表达方式。

    for chunk in json.JSONEncoder().iterencode(bigobject):mysocket.write(chunk)
    

六、异常🧃

exception json.JSONDecodeError(msg, doc, pos)

参数如下:

  • msg
    未格式化的错误消息
  • doc
    正在解析的 JSON 文档。
  • pos
    解析失败的 doc 的起始索引

源码:

源码比较简单,这里将源码贴出

class JSONDecodeError(ValueError):"""Subclass of ValueError with the following additional properties:msg: The unformatted error messagedoc: The JSON document being parsedpos: The start index of doc where parsing failedlineno: The line corresponding to poscolno: The column corresponding to pos"""# Note that this exception is used from _jsondef __init__(self, msg, doc, pos):lineno = doc.count('\n', 0, pos) + 1colno = pos - doc.rfind('\n', 0, pos)errmsg = '%s: line %d column %d (char %d)' % (msg, lineno, colno, pos)ValueError.__init__(self, errmsg)self.msg = msgself.doc = docself.pos = posself.lineno = linenoself.colno = colnodef __reduce__(self):return self.__class__, (self.msg, self.doc, self.pos)

演示代码:

演示手动触发异常,一般也用不上,更多是用于理解源码是如何工作的

# -*- coding: utf-8 -*-
import jsonerr_json = "{key: {\n'key2':value1}}}key3:value"
raise json.JSONDecodeError("json数据格式错误", err_json, len(err_json))
json.decoder.JSONDecodeError: json数据格式错误: line 2 column 27 (char 34)

参考资料💖

  • 维基百科中文版:
    • Json
    • 控制字符
  • Python 官方手册:
    • json — JSON 编码和解码器

相关博客😋

  • Python 牛逼的 pip包管理工具
  • Python 以优雅的姿势 操作文件
查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 第一次前端培训

    1 编译器 编译器选择Hbuilder X。和教程使用的编辑器选择一致&#xff0c;软件自带多种主题和快捷键方式&#xff08;快捷键包含IDEA的方案&#xff09;。 去Hbuilder X官网&#xff0c;下载。 HBuilderX-高效极客技巧 (dcloud.io)https://www.dcloud.io/hbuilderx.html 点击…...

    2024/5/5 6:42:13
  2. django配置静态资源和媒体资源

    在项目下&#xff0c;新建文件夹pstatic存放静态资源&#xff0c;新建文件夹media存放媒体资源。 配置静态资源 静态资源的配置分别由配置属性STATIC_URL,STATICFILES_DIRS和STATIC_ROOT完成&#xff0c;默认情况下&#xff0c;Django只配置了配置属性STATIC_URL。 一个项目在…...

    2024/4/20 0:58:03
  3. 如何用python控制OBS 狀態

    先在OBS安裝 websocket https://github.com/obsproject/obs-websocket/releases/tag/4.9.1 安裝obs-websocket-4.9.1-Windows-Installer.exe 2.OSB會出現 工具 會出現 websocket server setting 3.設定 websocket port 與 密碼 4.然後python #!/usr/bin/env python -- codi…...

    2024/5/5 4:16:17
  4. 宋浩概率论与数理统计-第二章-笔记

    概率论与数理统计第二章2.1 随机变量的概念2.2.1 离散型随机变量及其概率分布连续型随机变量及其概率密度函数2.2.2 分布函数的定义离散型的分布函数例题连续型的分布函数例题2.2.3 常见的分布离散型常见分布0-1分布几何分布二项分布泊松分布超几何分布连续型常见分布均匀分布指…...

    2024/4/13 17:42:40
  5. 优雅的使用Assert来处理业务的异常情况

    优雅前&#xff1a; 我们在一般的业务逻辑中&#xff0c;通常是使用if来进行判断&#xff0c;这样的好处是可以根据不同的条件来进行不同的业务处理&#xff0c;但是在常见的判断条件下这样就会显得特别不优雅。 // 假代码PostMapping("……")public CommonResult sa…...

    2024/4/13 17:42:10
  6. 2022年第一试,快速通过ISACA的CISM考试

    准备过程 2020年考过CISSP&#xff0c;2021年上半年考了CISA&#xff0c;2021年下半年考了高项。 2022年1月底通过ISACA的CISM考试&#xff0c;总体来说蛮顺利的。 由于有CISSP和CISA基础&#xff0c;就没有看CISM教材&#xff0c;主要还是刷题为主&#xff0c;有问题时查看一…...

    2024/5/5 12:20:47
  7. HTML网页设计基础——电商团购悬浮框

    案例&#xff1a; 图片资源&#xff1a; 参考代码&#xff1a; <!doctype html> <html> <head> <meta charset"utf-8"> <title>无标题文档</title> </head><style>*{margin: 0;padding: 0;}ul{ margin: 50px auto;…...

    2024/4/7 20:20:33
  8. jQuery-05-内容文本值操作

    1.1 普通元素内容 html() 相当于原生inner HTML html() // 获取元素的内容 html(内容) // 设置元素的内容1.2 普通元素文本内容 text() 相当于原生 innerText text() // 获取元素的文本内容 text(文本内容) // 设置元素的文本内容1.3 表单的值 val() 相当于原生value val() …...

    2024/4/18 6:22:01
  9. [Golang]力扣Leetcode—初级算法—其他—位1的个数

    [Golang]力扣Leetcode—初级算法—其他—位1的个数题目&#xff1a;编写一个函数&#xff0c;输入是一个无符号整数&#xff08;以二进制串的形式&#xff09;&#xff0c;返回其二进制表达式中数字位数为 ‘1’ 的个数&#xff08;也被称为汉明重量&#xff09;。 提示&#…...

    2024/4/19 22:31:22
  10. C++ Primer Plus(第6版)---编程作业完成(第八章)

    #include <iostream> #include <string> #include <cctype> #include <cstring> using namespace std; //函数原型 void p8_1(void); void p8_2(void); void p8_3(void); void p8_4(void); void p8_5(void); void p8_6(void); void p8_7(void); //主函…...

    2024/5/5 8:25:38
  11. Qt Creator编译,存在中文导致错误: error: C2001: 常量中有换行符

    今天使用 Qt Creator 创建工程&#xff0c;在代码中用到 qDebug 函数来输出提示信息&#xff0c; #include <QDebug>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {...qDebug() << "模态对话框弹出了.";... …...

    2024/4/13 17:42:35
  12. 力扣572(另一棵树的子树)

    力扣572&#xff08;另一棵树的子树&#xff09; 给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 二叉树 tree 的一棵子树包括 tree 的某个节点和这…...

    2024/4/13 17:43:16
  13. pymysql.err.InternalError: (1054, “Unknown column ‘LGD_小红‘ in ‘field list‘“)

    这是我做MongoDB项目遇到的问题&#xff0c;原本代码如下&#xff1a; 运行结果&#xff1a; 修改后的代码&#xff0c;加上了引号嵌套&#xff1a; 运行结果&#xff1a; mysql数据库查看数据&#xff0c;如下图&#xff1a; 成功插入数据。祝大家都能顺利解决&#xff…...

    2024/5/5 4:27:27
  14. Java 面试题(四)

    定义一个数组int[1,5,69,7,2,3,8]将其按从小到大的顺序输出 public static void main(String[] args) {/*** 定义一个数组int[1,5,69,7,2,3,8]将其按从小到大的顺序输出&#xff1f;*/int[] arr new int[]{1,5,69,7,2,3,8};//冒泡排序int temp 0;for(int i 0;i<arr.lengt…...

    2024/4/13 17:43:31
  15. 微信小程序-自定义组件之数据监听器

    点击R G B改变view颜色 <!--components/test/test.wxml--> <view style"background-color:rgb({{fullColor}});" class"colorBox">颜色值&#xff1a;{{fullColor}}</view> <button size"mini" type"default" b…...

    2024/4/18 14:30:16
  16. C语言自制关机病毒(goto语句制作)

    今日学习了一个有趣的小程序&#xff0c;也是第一次写博客&#xff0c;关机小程序如下&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <string.h> #include <math.h> #include <windows.h> #include <time.h>int…...

    2024/4/13 17:43:11
  17. 从零打造 GitHub 钉钉机器人

    本文同步发布于字节话云公众号。 背景 很多人都有自己的 GitHub 项目&#xff0c;可能需要将仓库中的事件自动通知到钉钉中。尽管钉钉群里可以添加专门的 GitHub 机器人&#xff0c;但它所支持的事件类型非常有限&#xff0c;基本只有 push 相关的事件。想要支持更多的事件&am…...

    2024/4/19 14:37:10
  18. Vue---过滤器的使用

    一、过滤器的作用是什么 1.格式化数据&#xff0c;比如将字符串格式化为首字母大写&#xff0c;将日期格式化为指定的格式等 二 .过滤器的使用 1.在Vue中过滤器和data、methods、computed是一个级别的&#xff0c;所以它的位置也和它们一样&#xff1a; <script> …...

    2024/4/13 17:43:06
  19. 【manim】导入库时出现ModuleNotFoundError: No module named‘XXX‘解决方法

    manim小白&#xff0c;照着教程配置好了ffmpeg,miktik,dvisvgm,sox后成功启动了example_scenes.py并生成了视频。随后我想找一些开源的稍微进阶些的代码测试一下效果&#xff0c;出现了这个错误 解决方法&#xff1a;碰到这类问题是因为我们manim-master中的manimlib文件包含的…...

    2024/4/13 17:43:11
  20. 瓷砖铺放(递归)(超简单)

    【问题描述】 有一长度为N&#xff08;1<N<10&#xff09;的地板&#xff0c;给定两种不同瓷砖&#xff1a;一种长度为1&#xff0c;零一种长度为2&#xff0c;数目不限。要将这个长度为N的地板铺满&#xff0c;一共有多少种不同的铺法? 例如&#xff1a;长度为4的地面…...

    2024/4/13 17:43:01

最新文章

  1. 【莫比乌斯变换-04】求解莫比乌斯变换系数

    求解莫比乌斯变换系数 文章目录 一、说明二、如何确定双线性变换系数2.1 变换基本形式2.2 通过三点确定 三、一般情况的变换3.1 最简单的情况&#xff1a;无穷大3.2 处理无穷大 四、Python 代码 一、说明 上一篇文章是对双线性变换的视觉介绍&#xff0c;又名莫比乌斯变换或分…...

    2024/5/5 15:21:13
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. Mac brew 安装软件

    Mac brew 安装软件 homebrew 速度慢 将brew 切换到国内镜像源 # 速度一般 # 步骤一 cd "$(brew --repo)" git remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git# 步骤二 cd "$(brew --repo)/Library/Taps/homebrew/homebr…...

    2024/5/3 9:32:52
  4. 数据结构——二叉树——二叉搜索树(Binary Search Tree, BST)

    目录 一、98. 验证二叉搜索树 二、96. 不同的二叉搜索树 三、538. 把二叉搜索树转换为累加树 二叉搜索树&#xff1a;对于二叉搜索树中的每个结点&#xff0c;其左子结点的值小于该结点的值&#xff0c;而右子结点的值大于该结点的值 一、98. 验证二叉搜索树 给你一个二叉树的…...

    2024/5/4 11:44:28
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/4 23:54:56
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/4 23:54:56
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/5/4 23:54:56
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/4 23:55:17
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/5/4 23:54:56
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/5/4 23:55:05
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/5/4 23:54:56
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/5/4 23:55:16
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/5/4 23:54:56
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/4 18:20:48
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/5/4 23:54:56
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/5/4 23:55:17
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/5/4 23:55:06
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/5/4 23:54:56
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/4 23:55:06
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/5 8:13:33
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/5/4 23:55:16
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/5/4 23:54:58
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/4 23:55:01
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/5/4 23:54:56
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57