Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取json的确切部分_Java_Json - Fatal编程技术网

Java 获取json的确切部分

Java 获取json的确切部分,java,json,Java,Json,我有一个json字符串,下面是一个示例 { "Param1":"Value1", "Param2":{...} "ParamThatINeed":{...} } 我想在java中使用gson lib只获取“paramthained”对象,获取所需内容的最佳方法是什么——编写根类,然后为“paramthained”编写类,然后解码json并仅使用“paramthained”对象 或者最好事先将我的jsonString转换为另一个字符串,该字符串将仅是使用例如regexp的“pa

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

{
   "Param1":"Value1",
   "Param2":{...}
   "ParamThatINeed":{...}
}
我想在java中使用gson lib只获取“paramthained”对象,获取所需内容的最佳方法是什么——编写根类,然后为“paramthained”编写类,然后解码json并仅使用“paramthained”对象

或者最好事先将我的jsonString转换为另一个字符串,该字符串将仅是使用例如regexp的“paramthained”jsonString对象?或者有更好的方法

JsonObject jobj = new Gson().fromJson(YOUR_JSON_HERE, JsonObject.class);
JsonElement value = jobj.get("ParamThatINeed");

将包含与
参数
键关联的元素。

您建议的解决方案是无痛且可扩展的(即,如果您决定将来读取其他字段,您只需向对象添加另一个字段)。一般来说,这正是您希望使用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背后的想法是避免直接使用
jsonement
和相关类

我绝对不鼓励将JSON字符串转换为其他格式的预处理步骤。结构化数据和字符串操作不会混合,因为它们会导致脆弱的代码。像Gson这样的JSON解析库的存在正是为了避免这样的字符串操作