在这里插入图片描述

我前段时间在写Json的时候,需要搭建一个json格式,然后存入到sql里面。

在这里,我要自己构建一个json格式,并存入到sql里。

但是问题是,我自己用python写的json格式,存入到sql 的时候,就会遇到这个问题:

遇到的问题:
1. 写的时候不是双引号
2. 调用的时候遇到python的解码方式和json的解析方式不一样

原来问题是这个:

JSON 支持字符串(String)类型,但是必须用 双引号 " 括起来。
例如:"hello",单引号会成为问题的。

而如果是用python读取sql 里面的json内容,因为读取出来的是字符串类型,所以要对字符串做转json,而且要处理单引号双引号的问题。

  • JSON 数据必须使用双引号,键必须是字符串。
  • Python 的 dictlist 可以轻松转换为 JSON。
  • 使用 json.dumps()json.dump() 可以生成 JSON 字符串或写入文件。
  • 复杂类型需要自定义序列化函数。

在 Python 中构建 JSON 格式的数据需要遵循一定的规则,因为 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,具有特定的语法和数据类型要求。以下是构建 JSON 格式数据的要求和注意事项:

1. JSON 的基本结构

JSON 数据可以是以下两种形式之一:

  • 对象(Object):用花括号 {} 表示,由键值对组成,键和值之间用冒号 : 分隔,键值对之间用逗号 , 分隔。

    • 示例:
      {
          "name": "Alice",
          "age": 25,
          "is_student": false
      }
      
  • 数组(Array):用方括号 [] 表示,由多个值组成,值之间用逗号 , 分隔。

    • 示例:
      ["apple", "banana", "orange"]
      

2. JSON 支持的数据类型

JSON 支持以下数据类型:

  • 字符串(String):必须用双引号 " 括起来。
    • 示例:"hello"
  • 数字(Number):整数或浮点数。
    • 示例:423.14
  • 布尔值(Boolean)truefalse
    • 示例:true
  • 数组(Array):有序的值列表。
    • 示例:[1, 2, 3]
  • 对象(Object):无序的键值对集合。
    • 示例:{"key": "value"}
  • 空值(null):表示空值。
    • 示例:null

3. Python 中构建 JSON 数据

在 Python 中,可以使用以下方式构建 JSON 数据:

(1) 使用字典和列表

Python 的字典(dict)和列表(list)可以很容易地转换为 JSON 格式。

  • 示例

    import json
    
    data = {
        "name": "Alice",
        "age": 25,
        "is_student": False,
        "courses": ["Math", "Science"],
        "address": {
            "city": "Beijing",
            "postal_code": "100000"
        }
    }
    
    # 将 Python 对象转换为 JSON 字符串
    json_string = json.dumps(data, indent=4)
    print(json_string)
    
  • 输出

    {
        "name": "Alice",
        "age": 25,
        "is_student": false,
        "courses": ["Math", "Science"],
        "address": {
            "city": "Beijing",
            "postal_code": "100000"
        }
    }
    
(2) 使用 json.dumps()

json.dumps() 函数可以将 Python 对象(如字典、列表)转换为 JSON 格式的字符串。

  • 参数说明

    • indent:缩进空格数,用于美化输出。
    • ensure_ascii:是否确保 ASCII 编码,设置为 False 可以支持非 ASCII 字符(如中文)。
    • sort_keys:是否按键排序。
  • 示例

    data = {
        "name": "张三",
        "age": 30
    }
    
    json_string = json.dumps(data, indent=4, ensure_ascii=False)
    print(json_string)
    
  • 输出

    {
        "name": "张三",
        "age": 30
    }
    
(3) 使用 json.dump()

json.dump() 函数可以将 Python 对象直接写入文件。

  • 示例
    data = {
        "name": "Alice",
        "age": 25
    }
    
    with open("data.json", "w", encoding="utf-8") as f:
        json.dump(data, f, indent=4, ensure_ascii=False)
    

4. 注意事项

  • 键必须是字符串:JSON 的键必须是双引号括起来的字符串,不能是单引号或其他类型。
  • 值必须符合 JSON 数据类型:Python 的 None 会转换为 JSON 的 nullTrueFalse 会转换为 truefalse
  • 不支持 Python 特定类型:如 datetimeset 等类型需要先转换为 JSON 支持的类型(如字符串)。

5. 处理复杂类型

如果 JSON 数据中包含 Python 的复杂类型(如 datetime),可以自定义序列化函数。

  • 示例

    from datetime import datetime
    
    def Text_(obj):
        if isinstance(obj, datetime):
            return obj.isoformat()
        raise TypeError("Type not serializable")
    
    data = {
        "name": "Alice",
        "created_at": datetime.now()
    }
    
    json_string = json.dumps(data, default=Text_, indent=4)
    print(json_string)
    
  • 输出

    {
        "name": "Alice",
        "created_at": "2025-09-21T12:34:56.789012"
    }
    

总结

  • JSON 数据必须使用双引号,键必须是字符串。
  • Python 的 dictlist 可以轻松转换为 JSON。
  • 使用 json.dumps()json.dump() 可以生成 JSON 字符串或写入文件。
  • 复杂类型需要自定义序列化函数。

更多推荐