如何解码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
相关产品推荐
相关产品推荐

