You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求JSON合法但YAML 1.2不合法的示例(Python验证场景)

YAML 1.2 并非 JSON 超集的反例

以下是几个能被 Python 的 json.loads() 正常解析,但 yaml.safe_loads() 会抛出错误的示例:

1. 包含重复键的对象

JSON 允许对象中存在重复键,解析时会保留最后一个键值对;但 YAML 1.2 的安全加载会直接报错。
示例代码:

import json
import yaml

# 可被 json.loads 正常解析
json_data = '{"key": 1, "key": 2}'
print(json.loads(json_data))  # 输出: {'key': 2}

# yaml.safe_loads 会抛出重复键错误
try:
    yaml.safe_load(json_data)
except yaml.YAMLError as e:
    print(f"YAML 解析错误: {e}")  # 抛出 DuplicateKeyError

2. 包含空字符的字符串

JSON 允许字符串中包含空字符(\u0000),但 YAML 安全加载会将其视为非法字符。
示例代码:

import json
import yaml

# 可被 json.loads 正常解析
json_data = '{"str": "hello\\u0000world"}'
result = json.loads(json_data)
print(result["str"])  # 输出包含空字符的字符串

# yaml.safe_loads 会抛出扫描错误
try:
    yaml.safe_load(json_data)
except yaml.YAMLError as e:
    print(f"YAML 解析错误: {e}")  # 抛出 ScannerError

3. 末尾带小数点的数字

JSON 允许数字以小数点结尾(比如 123.),但 YAML 1.2 的安全加载会将其视为无效数字格式。
示例代码:

import json
import yaml

# 可被 json.loads 正常解析
json_data = '{"num": 123.}'
print(json.loads(json_data))  # 输出: {'num': 123.0}

# yaml.safe_loads 会抛出扫描错误
try:
    yaml.safe_load(json_data)
except yaml.YAMLError as e:
    print(f"YAML 解析错误: {e}")  # 抛出 ScannerError

内容的提问来源于stack exchange,提问作者zephyr Victor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 03:32:50