java - 如何编写必要的 java 类以对以下 json 对象使用 gson.fromJson() ?

标签 java json gson

我正在尝试解析以下 JSON 对象:

{
    "key1": "value1",
    "key2": "value2",
    "key3": {
          "subkey1": {
                "subsubkey1": "value",
                "subsubkey2": "value"
           },
           "subkey2": {
                "subsubkey1": "value",
                "subsubkey2": "value"
           }

          ...........other dynamic subkeys..............
    }
}

我尝试了以下方法:

public class MyObject{
    String key1, key2;
    KEY3 key3;

    public class KEY3{



        public class SUBKEY{
            String subsubkey1;
            String subsubkey2;

            //getters and setters
        }
    }

    //getters and setters

}

然后执行以下操作:

MyObject mObject = gson.fromJson(jsonMessage, MyObject.class);

其中jsonMessage是上面的JSON字符串,子键是动态的,所以我不知道有多少个子键。但是key3变成了null.所以,我的问题是,如何使用 gson.fromJson 获取 key3 及其子键和子值?我不想这样做:

JSONObject jObject= new JSONObject(jsonMessage);
JSONObject key3Object = jObject.getJsonObject("key3");

我想直接使用gson.fromJson();

最佳答案

您可以尝试使用三个不同的 POJO 类,它们是此 JSON 字符串的精确副本。

class MyObject {
    private String key1, key2;
    private KEY3 key3;
}

class KEY3 {
    private SUBKEY3 subkey1;
    private SUBKEY3 subkey2;
    // getters and setters
}

class SUBKEY3 {
    private String subsubkey1;
    private String subsubkey2;
}

...

MyObject data = new Gson().fromJson(jsonString, MyObject.class);
System.out.println(new GsonBuilder().setPrettyPrinting().create().toJson(data));

输出:

{
  "key1": "value1",
  "key2": "value2",
  "key3": {
    "subkey1": {
      "subsubkey1": "value",
      "subsubkey2": "value"
    },
    "subkey2": {
      "subsubkey1": "value",
      "subsubkey2": "value"
    }
  }
}
<小时/>

如果键是动态并且事先不知道 JSON 字符串,则尝试使用 Map<String,Object>使用 TypeToken

Type type = new TypeToken<Map<String, Object>>() {}.getType();
Map<String, Object> data = new Gson().fromJson(jsonString, type);
System.out.println(new GsonBuilder().setPrettyPrinting().create().toJson(data));

关于java - 如何编写必要的 java 类以对以下 json 对象使用 gson.fromJson() ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25182993/

相关文章:

java - 使用换行正则表达式仅拆分字符串整数

php - 从javascript读取JSON到PHP

java - 使用 GSON/POJO 解析 JSON

java - com.google.gson 包不存在

java - 在 Mockito 的单元测试中使用带有 @Required 字段的类

java - 使用特定目录的文件名填充 JComboBox

javascript - 如何使用 PhantomJS 抓取嵌入的 JSON

java - jackson-dataformat-avro 错误

java - gson - 反序列化包含列表的对象

java - 将字符串传递给 onItemClick 函数