如何使用Gson解析含JSONObject的服务器返回数据?
使用Gson解析包含嵌套对象的JSON数据
针对你提供的这段JSON数据,用Gson解析其实很简单,核心就是创建和JSON结构一一对应的Java实体类,再借助Gson的核心API完成解析。下面一步步来拆解:
1. 定义Java实体类
首先要把JSON的每一层结构都映射成Java类。你的JSON里包含一个嵌套的picture对象,所以我们需要两个类(也可以用内部类来组织):
根实体类(比如命名为Product)
import com.google.gson.annotations.SerializedName; import java.util.Date; public class Product { @SerializedName("_id") private String id; @SerializedName("userID") private String userId; private String name; private int price; private String description; @SerializedName("__v") private int version; @SerializedName("boardVisibility") private String boardVisibility; private Date date; // 若想直接解析成Date类型,需额外配置Gson // 也可以用String date; 直接存储日期字符串 private Picture picture; // 记得生成getter、setter方法,或者用Lombok注解简化代码 }
嵌套的Picture类
可以是单独的类,也可以作为Product的内部静态类:
public class Picture { private String url; private String name; // 同样需要添加getter、setter方法 }
注意:JSON里的字段名和Java变量名不一致的(比如
_id、__v),要用@SerializedName注解做映射,Gson会自动识别对应关系。
2. 执行解析操作
有了实体类之后,就可以用Gson的fromJson()方法直接解析了:
基础解析代码
import com.google.gson.Gson; public class JsonParserDemo { public static void main(String[] args) { // 假设这是你从服务器拿到的JSON字符串 String jsonStr = "{\"_id\":\"5a78263eab294307bebc2e6b\",\"userID\":\"PvIMsjink1UcrwXZ4gb899W5Kxo2\",\"name\":\"battery\",\"price\":22,\"description\":\"t\",\"__v\":0,\"boardVisibility\":\"MainBoard\",\"date\":\"2018-02-05T09:39:10.597Z\",\"picture\":{\"url\":\"https://firebasestorage.googleapis.com/v0/b/bitbuy-bitbuy.appspot.com/o/user%2FPvIMsjink1UcrwXZ4gb899W5Kxo2%2FDepositphotos_59984669_s-2015.jpg?alt=media&token=a562fd6d-98ff-4fb8-ad93-c251a5016b0d\",\"name\":\"Depo...\"}}"; // 创建Gson实例 Gson gson = new Gson(); // 解析成Product对象 Product product = gson.fromJson(jsonStr, Product.class); // 现在就能通过product对象获取所有字段了 System.out.println("商品名称:" + product.getName()); System.out.println("图片URL:" + product.getPicture().getUrl()); } }
日期字段的额外配置
如果希望把date字段直接解析成java.util.Date类型(而非字符串),需要给Gson配置日期格式化器:
import com.google.gson.GsonBuilder; import java.text.SimpleDateFormat; // 创建带日期格式的Gson实例 Gson gson = new GsonBuilder() .setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") .create();
这样解析出来的product.getDate()就是一个标准的Date对象了。
3. 依赖说明
别忘了在项目里引入Gson依赖:
- Maven(在
pom.xml中添加):
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.10.1</version> <!-- 使用最新稳定版即可 --> </dependency>
- Gradle(在
build.gradle中添加):
implementation 'com.google.code.gson:gson:2.10.1'
内容的提问来源于stack exchange,提问作者Igor F.
相关产品推荐
相关产品推荐

