我有一个json字符串,这是示例
{
"Param1":"Value1",
"Param2":{...}
"ParamThatINeed":{...}
}
我想在java中只使用gson lib获取“ParamThatINeed”对象,获得我需要的最佳方法是什么 - 编写根类,然后为“ParamThatINeed”编写类,然后解码json并仅使用“ParamThatINeed”宾语?
或者也许最好事先将我的jsonString转换为另一个字符串,这将只使用例如regexp的“ParamThatINeed”jsonString对象?或者也许有更好的方法?
答案 0 :(得分:2)
JsonObject jobj = new Gson().fromJson(YOUR_JSON_HERE, JsonObject.class);
JsonElement value = jobj.get("ParamThatINeed");
value
将包含与ParamThatINeed
键关联的元素。
答案 1 :(得分:1)
您建议的解决方案是无痛且可扩展的(即如果您决定在将来阅读其他字段,则只需在对象中添加另一个字段)。一般来说,你想要如何使用Gson - 构建必要的Java类来表示你关心的 ,Gson将默默地丢弃你不关心的字段。对于您的示例,看起来像:
private static final Gson GSON = ...;
public static class MyJsonData {
private final ParamThatINeed paramThatINeed;
public ParamThatINeed getParamThatINeed() { ... }
}
public static class ParamThatINeed {
...
}
public static ParamThatINeed extractParamThatINeed(String json) {
return GSON.fromJson(json, MyJsonData.class).getParamThatINeed();
}
你可以自己解析字段,就像@GuiSim建议的那样,但如果你的需求发生变化,这不会轻易扩展,一般而言,Gson背后的想法是避免直接使用{ {1}}及相关课程。
我肯定会阻止将JSON字符串转换为其他格式的预处理步骤。结构化数据和字符串操作不会混合,因为它们会导致脆弱的代码。像Gson这样的JSON解析库完全存在,以避免这种字符串操作。