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

如何解码JSON字典类型属性?请指导对应结构体的声明方式

匹配给定JSON的结构体声明

下面针对几种主流编程语言,给出与你提供的JSON格式匹配的结构体/类声明:

Swift

借助Codable协议实现自动解码,通过编码键映射处理下划线与驼峰命名的差异:

struct PlayerResponse: Codable {
    let data: Player
}

struct Player: Codable {
    let playerId: Int
    let teamId: Int
    let countryId: Int
    let positionId: Int
    let commonName: String
    let displayName: String
    let fullname: String
    let firstname: String
    let lastname: String
    let nationality: String
    let birthdate: String
    let birthcountry: String
    let birthplace: String
    
    enum CodingKeys: String, CodingKey {
        case playerId = "player_id"
        case teamId = "team_id"
        case countryId = "country_id"
        case positionId = "position_id"
        case commonName = "common_name"
        case displayName = "display_name"
        case fullname, firstname, lastname, nationality, birthdate, birthcountry, birthplace
    }
}

Go

通过结构体标签直接指定对应的JSON键名:

type PlayerResponse struct {
    Data Player `json:"data"`
}

type Player struct {
    PlayerID     int    `json:"player_id"`
    TeamID       int    `json:"team_id"`
    CountryID    int    `json:"country_id"`
    PositionID   int    `json:"position_id"`
    CommonName   string `json:"common_name"`
    DisplayName  string `json:"display_name"`
    Fullname     string `json:"fullname"`
    Firstname    string `json:"firstname"`
    Lastname     string `json:"lastname"`
    Nationality  string `json:"nationality"`
    Birthdate    string `json:"birthdate"`
    Birthcountry string `json:"birthcountry"`
    Birthplace   string `json:"birthplace"`
}

Python

标准库dataclasses版本

直接使用与JSON键名一致的字段名,配合json模块完成解码:

from dataclasses import dataclass
import json

@dataclass
class Player:
    player_id: int
    team_id: int
    country_id: int
    position_id: int
    common_name: str
    display_name: str
    fullname: str
    firstname: str
    lastname: str
    nationality: str
    birthdate: str
    birthcountry: str
    birthplace: str

@dataclass
class PlayerResponse:
    data: Player

# 解码示例
# json_str = '{"data": {"player_id": 184798, ...}}'
# parsed_data = json.loads(json_str)
# response = PlayerResponse(**parsed_data)

Pydantic版本(带自动类型校验)

from pydantic import BaseModel

class Player(BaseModel):
    player_id: int
    team_id: int
    country_id: int
    position_id: int
    common_name: str
    display_name: str
    fullname: str
    firstname: str
    lastname: str
    nationality: str
    birthdate: str
    birthcountry: str
    birthplace: str

class PlayerResponse(BaseModel):
    data: Player

# 解码示例
# json_str = '{"data": {"player_id": 184798, ...}}'
# response = PlayerResponse.model_validate_json(json_str)

Java(Jackson库)

通过JsonProperty注解映射JSON键与类属性:

import com.fasterxml.jackson.annotation.JsonProperty;

public class PlayerResponse {
    @JsonProperty("data")
    private Player data;

    public Player getData() { return data; }
    public void setData(Player data) { this.data = data; }
}

public class Player {
    @JsonProperty("player_id")
    private int playerId;
    @JsonProperty("team_id")
    private int teamId;
    @JsonProperty("country_id")
    private int countryId;
    @JsonProperty("position_id")
    private int positionId;
    @JsonProperty("common_name")
    private String commonName;
    @JsonProperty("display_name")
    private String displayName;
    private String fullname;
    private String firstname;
    private String lastname;
    private String nationality;
    private String birthdate;
    private String birthcountry;
    private String birthplace;

    // 所有字段的getter和setter方法
    public int getPlayerId() { return playerId; }
    public void setPlayerId(int playerId) { this.playerId = playerId; }
    // 其余字段的getter/setter同理
}

内容的提问来源于stack exchange,提问作者Prakhar Parakh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 12:35:23