如何用Jackson/Gson将指定JSON解析为ViewModelPOJO类?
用Jackson/Gson解析嵌套JSON到POJO类
你的需求完全可以通过Jackson或Gson实现,你编写的POJO类已经接近正确,仅需修正字段名与JSON的匹配问题即可。
修正后的POJO类
JSON中的字段名为metadata,但你原代码中DeviceNode类的字段是metaData(大小写不一致),需要调整为一致,或通过注解映射。以下是修正后的代码:
class ViewModelPOJO { private List<DeviceNode> deviceNodes; // 生成getter、setter方法,也可使用Lombok的@Data注解简化 public List<DeviceNode> getDeviceNodes() { return deviceNodes; } public void setDeviceNodes(List<DeviceNode> deviceNodes) { this.deviceNodes = deviceNodes; } } public class DeviceNode { private String header; private List<DeviceNode> children; // 字段名与JSON保持一致 private String metadata; // 生成getter、setter方法 public String getHeader() { return header; } public void setHeader(String header) { this.header = header; } public List<DeviceNode> getChildren() { return children; } public void setChildren(List<DeviceNode> children) { this.children = children; } public String getMetadata() { return metadata; } public void setMetadata(String metadata) { this.metadata = metadata; } }
若不想修改字段名,保留metaData,可通过注解映射:
- Jackson使用
@JsonProperty("metadata")标记字段 - Gson使用
@SerializedName("metadata")标记字段
Jackson实现步骤
- 引入Jackson依赖(以Maven为例):
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version> </dependency>
- 解析JSON代码:
import com.fasterxml.jackson.databind.ObjectMapper; import java.io.File; import java.io.IOException; public class JacksonParser { public static void main(String[] args) { ObjectMapper mapper = new ObjectMapper(); try { ViewModelPOJO viewModel = mapper.readValue(new File("your-json-file.json"), ViewModelPOJO.class); System.out.println("解析完成,设备节点总数:" + viewModel.getDeviceNodes().size()); // 可进一步遍历嵌套结构 } catch (IOException e) { e.printStackTrace(); } } }
Gson实现步骤
- 引入Gson依赖(以Maven为例):
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.10.1</version> </dependency>
- 解析JSON代码:
import com.google.gson.Gson; import java.io.FileReader; import java.io.IOException; public class GsonParser { public static void main(String[] args) { Gson gson = new Gson(); try (FileReader reader = new FileReader("your-json-file.json")) { ViewModelPOJO viewModel = gson.fromJson(reader, ViewModelPOJO.class); System.out.println("解析完成,设备节点总数:" + viewModel.getDeviceNodes().size()); // 可进一步遍历嵌套结构 } catch (IOException e) { e.printStackTrace(); } } }
说明
Jackson和Gson都支持递归解析嵌套结构,因为DeviceNode类中包含了自身类型的List,框架会自动处理层级嵌套的JSON数据。
内容的提问来源于stack exchange,提问作者Abhishek Ranjan
相关产品推荐
相关产品推荐

