如何为含动态日期键的聊天应用JSON响应创建Model Class
如何为含动态日期键的JSON创建Model类
针对你提供的JSON结构,核心的动态部分是chat_messages内的日期键,下面给出几种主流开发语言的实现方案:
方案1:Java(适配Gson/Jackson框架)
1.1 定义基础实体类
UserDetail类:
public class UserDetail { private String id; private String first_name; private String last_name; private String image_url; // 自动生成Getter、Setter方法 }
ChatMessage类:
public class ChatMessage { private String id; private String chat_id; private String sender_id; private String reciever_id; private String message; private String date; private String created_at; private String user_id; // 自动生成Getter、Setter方法 }
1.2 处理动态键的Data类
用Map<String, List<ChatMessage>>接收动态日期键对应的消息列表:
public class Data { private UserDetail user_detail; private Map<String, List<ChatMessage>> chat_messages; // 自动生成Getter、Setter方法 }
1.3 最外层响应类
public class ChatResponse { private int result; private String msg; private Data data; // 自动生成Getter、Setter方法 }
解析时直接用框架常规解析逻辑,会自动将动态日期键映射为Map的key。
方案2:Kotlin(适配Gson/Moshi框架)
利用Kotlin数据类简化代码,动态部分同样用Map处理:
data class ChatResponse( val result: Int, val msg: String, val data: Data ) data class Data( val user_detail: UserDetail, val chat_messages: Map<String, List<ChatMessage>> ) data class UserDetail( val id: String, val first_name: String, val last_name: String, val image_url: String ) data class ChatMessage( val id: String, val chat_id: String, val sender_id: String, val reciever_id: String, val message: String, val date: String, val created_at: String, val user_id: String )
方案3:Swift(适配Codable协议)
3.1 定义基础模型
struct UserDetail: Codable { let id: String let firstName: String let lastName: String let imageUrl: String enum CodingKeys: String, CodingKey { case id case firstName = "first_name" case lastName = "last_name" case imageUrl = "image_url" } } struct ChatMessage: Codable { let id: String let chatId: String let senderId: String let recieverId: String let message: String let date: String let createdAt: String let userId: String enum CodingKeys: String, CodingKey { case id case chatId = "chat_id" case senderId = "sender_id" case recieverId = "reciever_id" case message, date case createdAt = "created_at" case userId = "user_id" } }
3.2 核心数据类
struct DataModel: Codable { let userDetail: UserDetail let chatMessages: [String: [ChatMessage]] enum CodingKeys: String, CodingKey { case userDetail = "user_detail" case chatMessages = "chat_messages" } } struct ChatResponse: Codable { let result: Int let msg: String let data: DataModel }
Swift的Codable协议会自动将动态日期键解析为字典的key,无需额外解码逻辑。
方案4:Python(适配Pydantic库)
用Pydantic的Dict类型处理动态键:
from pydantic import BaseModel from typing import List, Dict class UserDetail(BaseModel): id: str first_name: str last_name: str image_url: str class ChatMessage(BaseModel): id: str chat_id: str sender_id: str reciever_id: str message: str date: str created_at: str user_id: str class Data(BaseModel): user_detail: UserDetail chat_messages: Dict[str, List[ChatMessage]] class ChatResponse(BaseModel): result: int msg: str data: Data
解析时调用ChatResponse.parse_raw(json_str)即可完成JSON到Model的转换。
内容的提问来源于stack exchange,提问作者Rahul Pathak
相关产品推荐
相关产品推荐

