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

如何为含动态日期键的聊天应用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 15:48:30