使用Gson库解析Java Properties文件中的JSON数组
解决Gson解析Properties中JSON数组的问题
我来帮你搞定这个解析问题,咱们一步步排查和解决:
1. 先修正Properties里的JSON格式
你当前Properties里的JSON写法不符合标准JSON规范——JSON的键必须用双引号包裹,字符串类型的值也需要双引号(数字、布尔值不用)。原内容要改成这样:
jsonarray = [ { "key1" : "value1", "key2" : "value2" } ]
如果value1/value2是数字,比如123,那可以不用双引号,写成"key1": 123就行。
2. 用Gson正确解析JSON数组字符串
你之前用JsonPrimitive的方式不对,因为JsonPrimitive是用来包装单个基本类型的(比如单个字符串、数字),而JSON数组是复合结构,得用JsonParser把整个字符串解析成JsonArray,再遍历提取值。
给你完整的可运行代码示例:
import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import java.io.FileInputStream; import java.io.IOException; import java.util.Properties; public class JsonArrayFromProperties { public static void main(String[] args) { Properties properties = new Properties(); String filePath = "your_config.properties"; // 替换成你的Properties文件路径 try { properties.load(new FileInputStream(filePath)); String jsonArrayStr = properties.getProperty("jsonarray"); // 解析JSON数组字符串 JsonElement rootElement = JsonParser.parseString(jsonArrayStr); if (rootElement.isJsonArray()) { JsonArray jsonArray = rootElement.getAsJsonArray(); // 遍历数组里的每个JSON对象 for (JsonElement itemElement : jsonArray) { if (itemElement.isJsonObject()) { JsonObject itemObj = itemElement.getAsJsonObject(); // 提取对应键的值,记得先判断键是否存在避免空指针 if (itemObj.has("key1")) { String key1Val = itemObj.get("key1").getAsString(); System.out.println("key1的值:" + key1Val); } if (itemObj.has("key2")) { String key2Val = itemObj.get("key2").getAsString(); System.out.println("key2的值:" + key2Val); } } } } } catch (IOException e) { e.printStackTrace(); } } }
3. 常见坑点排查
- 格式问题:如果还是解析失败,先检查JSON字符串有没有多余的空格或者转义问题——Properties里如果JSON有特殊字符,可能需要转义,但你的场景里只要保证双引号正确就没问题。
- 空值处理:如果Properties里的
jsonarray键不存在,getProperty会返回null,记得加非空判断,比如if (jsonArrayStr != null)再去解析。 - Gson版本:确保你用的是较新的Gson版本(比如2.8+),旧版本的
JsonParser用法可能不一样(比如旧版用new JsonParser().parse(),新版推荐JsonParser.parseString())。
内容的提问来源于stack exchange,提问作者Nagabhushan S N
相关产品推荐
相关产品推荐

