有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我需要从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();

我被判非法

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

问题是它在开始和结束时都需要额外的双引号

我曾尝试在键和值中添加引号,但没有成功。我需要使用gson库本身,所以请不要建议其他库。我不能为它创建POJO类并使用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"}]

共 (1) 个答案

  1. # 1 楼答案

    你在这里使用的Javadoc of ^{}

    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" } ]