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

如何反序列化非英文键的JSON,映射到属性为英文的Java类?

反序列化字段对应实现方案

字段映射关系梳理

首先明确JSON键和Java类属性的对应规则:

  • JSON键tunnus → Java类id属性
  • JSON键nimi → Java类name属性
  • JSON键sijainti → Java类location属性
  • JSON键korkeus → Java类height属性

另外注意:你的JSON结构外层包含count和results两个字段,其中results才是灯塔对象数组,需要先定义一个外层响应包装类再做反序列化。

方案1:使用Jackson库(Spring生态默认JSON库)

第一步:给Lighthouse类添加字段映射注解

import com.fasterxml.jackson.annotation.JsonProperty;

public class Lighthouse {
    
    @JsonProperty("tunnus")
    private int id;
    @JsonProperty("nimi")
    private String name;
    @JsonProperty("sijainti")
    private String location;
    @JsonProperty("korkeus")
    private int height;
    
    // 原有构造方法、getter、setter保持不变
}

第二步:定义外层响应包装类

import java.util.List;

public class LighthouseResponse {
    private int count;
    private List<Lighthouse> results;

    public int getCount() { return count; }
    public void setCount(int count) { this.count = count; }
    public List<Lighthouse> getResults() { return results; }
    public void setResults(List<Lighthouse> results) { this.results = results; }
}

第三步:反序列化代码示例

import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.File;

// 反序列化逻辑
ObjectMapper objectMapper = new ObjectMapper();
LighthouseResponse response = objectMapper.readValue(new File("lighthouses.json"), LighthouseResponse.class);
List<Lighthouse> lighthouses = response.getResults();

Jackson默认支持自动将字符串格式的数字转为int类型,不需要额外处理korkeus的字符串格式问题。

方案2:使用Gson库

第一步:给Lighthouse类添加字段映射注解

import com.google.gson.annotations.SerializedName;

public class Lighthouse {
    
    @SerializedName("tunnus")
    private int id;
    @SerializedName("nimi")
    private String name;
    @SerializedName("sijainti")
    private String location;
    @SerializedName("korkeus")
    private int height;
    
    // 原有构造方法、getter、setter保持不变
}

第二步:定义外层响应包装类(和Jackson方案一致,无需额外注解)

第三步:反序列化代码示例

import com.google.gson.Gson;
import java.io.FileReader;
import java.io.Reader;

// 反序列化逻辑
Gson gson = new Gson();
try (Reader reader = new FileReader("lighthouses.json")) {
    LighthouseResponse response = gson.fromJson(reader, LighthouseResponse.class);
    List<Lighthouse> lighthouses = response.getResults();
}

注意事项

你提供的JSON示例中results数组最后一个元素末尾有多余的逗号,反序列化前请先删除该逗号,避免严格模式的解析器报错。

内容的提问来源于stack exchange,提问作者Timo Kälviäinen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:57:04