如何使用ArrayDeque结合Gson从JSON文件中获取数据?
使用Gson结合ArrayDeque读取JSON文本数据的实现方案
嘿,我来帮你搞定这个问题!其实用Gson把JSON数组转成ArrayDeque<TextData>非常简单,下面一步步给你讲清楚具体实现:
1. 先确保Gson依赖已配置
如果是Maven项目,在pom.xml里添加:
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.10.1</version> <!-- 建议用最新稳定版本 --> </dependency>
如果是Gradle项目,在build.gradle的dependencies块里添加:
implementation 'com.google.code.gson:gson:2.10.1'
2. 核心实现代码
这里提供两种可行的实现方式,你可以根据自己的习惯选择:
方式一:先转List再转ArrayDeque
这种方式更直观,适合刚接触Gson的开发者:
import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import java.util.ArrayDeque; import java.util.List; public class JsonToDequeExample { public static void main(String[] args) { // 你的JSON字符串 String json = "[ { \"type\": \"text\", \"content\": \"test test test\", \"time\": 100 }, { \"type\": \"text\", \"content\": \"abcedfg\", \"time\": 100 }, { \"type\": \"text\", \"content\": \"some data\", \"time\": 100 }, { \"type\": \"text\", \"content\": \"1234567\", \"time\": 100 } ]"; // 初始化Gson实例 Gson gson = new Gson(); // 第一步:将JSON解析为List<TextData> List<TextData> textDataList = gson.fromJson( json, new TypeToken<List<TextData>>() {}.getType() ); // 第二步:将List转换为ArrayDeque ArrayDeque<TextData> textDataDeque = new ArrayDeque<>(textDataList); // 验证解析结果 for (TextData data : textDataDeque) { System.out.printf("Type: %s, Content: %s, Time: %d%n", data.type, data.content, data.time); } } } // 你的TextData类,注意调整访问权限或添加无参构造 class TextData { public String type; public String content; public long time; // 无参构造(Gson默认需要这个来实例化对象) public TextData() {} // 原有的有参构造 public TextData(String type, String content, long time) { this.type = type; this.content = content; this.time = time; } }
方式二:直接解析为ArrayDeque
如果你想一步到位,可以直接用TypeToken指定ArrayDeque<TextData>的类型:
// 替换方式一中的List转换步骤,直接解析为ArrayDeque ArrayDeque<TextData> textDataDeque = gson.fromJson( json, new TypeToken<ArrayDeque<TextData>>() {}.getType() );
3. 关键注意事项
- TextData类的配置:Gson通过反射实例化对象时,默认需要无参构造函数;或者你可以把字段设为
public(就像上面代码那样),这样Gson可以直接给字段赋值,避免构造函数相关的问题。 - TypeToken的作用:由于Java泛型擦除机制,直接传入
ArrayDeque.class的话,Gson无法知道容器内的元素类型是TextData,所以必须用TypeToken来保留泛型类型信息,确保解析的准确性。
内容的提问来源于stack exchange,提问作者Touki Liu
相关产品推荐
相关产品推荐

