得到json的确切部分

时间:2016-10-31 20:36:33

标签: java json

我有一个json字符串,这是示例

{
   "Param1":"Value1",
   "Param2":{...}
   "ParamThatINeed":{...}
}

我想在java中只使用gson lib获取“ParamThatINeed”对象,获得我需要的最佳方法是什么 - 编写根类,然后为“ParamThatINeed”编写类,然后解码json并仅使用“ParamThatINeed”宾语?

或者也许最好事先将我的jsonString转换为另一个字符串,这将只使用例如regexp的“ParamThatINeed”jsonString对象?或者也许有更好的方法?

2 个答案:

答案 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解析库完全存在,以避免这种字符串操作。