python定制datatime类型 json序列化和保留中文demo

博客主要围绕JSON序列化展开,指出在JSON序列化时遇到中文会默认转换成unicode,介绍了让其保留中文形式的方法,即使用代码a=json.dumps({'ddf':'你好'}, ensure_ascii=False) 。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自定义时间序列化转换器

import json
from json import JSONEncoder
from datetime import datetime
class ComplexEncoder(JSONEncoder):
    def default(self, obj):
        if isinstance(obj, datetime):
            return obj.strftime(‘%Y-%m-%d %H:%M:%S‘)
        else:
            return super(ComplexEncoder,self).default(obj)
d = { ‘name‘:‘alex‘,‘data‘:datetime.now()}
print(json.dumps(d,cls=ComplexEncoder))

json序列化时遇到中文会默认转换成unicode ,如何让他保留中文形式


a=json.dumps({“ddf”:“你好”},ensure_ascii=False)





import json
a=json.dumps({"ddf":"你好"},ensure_ascii=False)
print(a) #{"ddf": "你好"}



### DateTimeFormat 与 JsonFormat 的主要区别及使用场景 #### 基础概念 `@DateTimeFormat` 是 Spring 框架提供的注解,主要用于将前端传入的字符串格式日期解析为 Java 中的日期对象[^5]。而 `@JsonFormat` 是 Jackson 库提供的注解,用于在 JSON 序列化序列化过程中指定日期时间的格式[^3]。 #### 主要区别 1. **来源与用途** - `@DateTimeFormat` 是 Spring 提供的注解,主要用于处理表单数据绑定时的日期时间格式问题。 - `@JsonFormat` 是 Jackson 提供的注解,主要用于处理 JSON 数据交互中的日期时间格式问题。 2. **使用场景** - `@DateTimeFormat` 通常应用于控制器层(Controller),用于将前端传递的字符串日期参数转换为 Java 的日期对象。 - `@JsonFormat` 通常应用于 DTO(数据传输对象)或实体类中,用于在 JSON 数据交互时对日期进行序列化序列化操作[^3]。 3. **格式化规则** - 两者都可以通过 `pattern` 属性定义日期时间的格式,但 `@DateTimeFormat` 更适合处理复杂的日期时间格式,如包含时区信息的日期。 - `@JsonFormat` 则更注重于 JSON 数据的格式化,支持额外的属性如 `timezone`,用于指定时区[^2]。 4. **适用阶段** - `@DateTimeFormat` 主要用于请求阶段,即将前端发送的字符串日期转换为 Java 对象。 - `@JsonFormat` 主要用于响应阶段,即将 Java 对象的日期字段以指定格式转换为 JSON 字符串。 #### 示例代码 以下是一个结合 `@DateTimeFormat` `@JsonFormat` 的示例: ```java import com.fasterxml.jackson.annotation.JsonFormat; import org.springframework.format.annotation.DateTimeFormat; import java.util.Date; public class MyEntity { // 使用 @DateTimeFormat 将前端传递的字符串日期转换为 Date 对象 @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date requestDate; // 使用 @JsonFormat 将 Date 对象序列化为指定格式的字符串返回给前端 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date responseDate; // Getter Setter 方法 public Date getRequestDate() { return requestDate; } public void setRequestDate(Date requestDate) { this.requestDate = requestDate; } public Date getResponseDate() { return responseDate; } public void setResponseDate(Date responseDate) { this.responseDate = responseDate; } } ``` #### 注意事项 - 在使用 `@JsonFormat` 时,如果需要处理 `LocalDateTime` 类型的日期,可以通过自定义序列化序列化器来避免精度丢失问题[^4]。 - 如果同时使用了 `@DateTimeFormat` `@JsonFormat`,需要注意两者的格式是否一致,以避免前后端数据不匹配的问题。 ### 总结 `@DateTimeFormat` `@JsonFormat` 虽然都可以用于日期时间格式化,但它们的应用场景不同:前者主要用于前端请求参数到后台方法调用时的日期转换,后者主要用于后台向前端响应 JSON 数据时的日期序列化序列化。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值