使用 gson 库从 Java 属性文件解析 Json

Parse Json from Java properties file using gson library

我需要从 java 属性文件中读取并解析 json 数组。我能够读取属性文件并获取 json 数组字符串。但是我无法解析 json 数组并获取值。我正在使用 gson 库。这是来自属性文件的数据

jsonarray = [ { key1 : value1, key2 : value2 } ]

代码:

Properties properties = new Properties();
properties.load(new FileInputStream(filePath));
String jsonArray = properties.getProperty("jsonarray")
JsonElement element = new JsonPrimitive(jsonArray);
JsonArray array = element.getAsJsonArray();

我收到 IllegalStateException

java.lang.IllegalStateException: Not a JSON Array: "[ { key1 : value1, key2 : value2 } ]"

问题是它在开头和结尾处使用了额外的双引号。

我试过为键和值添加引号,但没有成功。我需要使用 gson 库本身,所以请不要建议其他库。我不能为它创建一个 POJO class 并使用 new Gson().fromJson(jsonArray),所以请不要也这样建议。

我搜索并尝试了很多都没有成功。我提到的方法是 here

提前致谢

编辑 1:我在属性文件中尝试了以下内容

jsonarray = [ { "key1" : "value1", "key2" : "value2" } ]

我遇到了同样的异常,比如

java.lang.IllegalStateException: Not a JSON Array: "[ { \"key1\" : \"value1\", \"key2\" : \"value2\" } ]"

我尝试在代码中创建一个 JsonArray 对象并打印它

JsonArray array = new JsonArray();
JsonObject object = new JsonObject();
object.addProperty("key1", "value1");
object.addProperty("key2", "value2");
array.add(object);
System.out.println(array.toString());

输出如下

[{"key1":"value1","key2":"value2"}]

您在此处使用的 Javadoc of JsonPrimitive

JsonElement element = new JsonPrimitive(jsonArray);

Create a primitive containing a String value.

当你做

JsonArray array = element.getAsJsonArray();

它显​​然会失败,因为 element 是一个 JSON 字符串,而不是 JSON 数组。直接解析 JSON

JsonArray array = new Gson().fromJson(jsonArray, JsonArray.class)

这是您将属性文件内容更改为实际内容后的全部内容JSON

jsonarray = [ { "key1" : "value1", "key2" : "value2" } ]