Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.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
如何将带有转义JSON和动态键的参数字符串的自定义对象反序列化为Java对象_Java_Json_Jackson_Deserialization - Fatal编程技术网

如何将带有转义JSON和动态键的参数字符串的自定义对象反序列化为Java对象

如何将带有转义JSON和动态键的参数字符串的自定义对象反序列化为Java对象,java,json,jackson,deserialization,Java,Json,Jackson,Deserialization,我有一个JSON,如下所示 { "fixedKey1" : "value1", "fixedKey2" : "value2", "fixedKey3" : "{\"DYNAMICKEY\":{\"innerKey1\":\"innerVal1\",\"innerKey2\":\"i

我有一个JSON,如下所示

{
   "fixedKey1" : "value1",
   "fixedKey2" : "value2",
   "fixedKey3" : "{\"DYNAMICKEY\":{\"innerKey1\":\"innerVal1\",\"innerKey2\":\"innerVal1\"}}"
}
我只想提取fixedKey3中的内部JSON键和值

请注意,fixedKey3是一个复杂的字符串,它有一个我无法控制的动态键。每个响应都不同,因此永远不能是固定的键参数

到目前为止,我已经编写了以下代码,进行了反复试验,但没有成功

下面是整个JSON的外部类

class Outer {
  String fixedKey1;

  String fixedKey2;

  @JsonProperty("fixedKey3")
  public void setFixedKey3(String input) {
      ObjectMapper mapper = new ObjectMapper();

      //NEED help here
      mapper.readValue(input, InnerData.class);
  }
}
下面是应该包含内部值数据的内部类

class InnerData {
   String innerKey1;

   String innerKey2;
}

如果你能帮助我,我将非常感激。提前感谢。

关于您的场景的第一个问题是关于
的“fixedKey3”:“{\'DYNAMICKEY\”:{\'innerKey1\':\'innerKey1\',\'innerKey2\':\'innerVal1\'}”
包含转义双引号:解决问题的第一步是使用该方法并阅读使用获得的
JsonNode
以去除转义双引号,如下所示:

JsonNode root = mapper.readTree(json);
//s will contains {"DYNAMICKEY":{"innerKey1":"innerVal1","innerKey2":"innerVal1"}}
String s = root.get("fixedKey3").asText();
要获取
“DYNAMICKEY”
动态键,您可以使用该方法,并使用该方法将获得的
JsonNode
映射到一个
InnerData
对象,正如您所期望的那样:

JsonNode dinamycKeyNode = mapper.readTree(s);
String dynamicKey = dinamycKeyNode.fieldNames().next(); //<-- it will contains your dynamic key
//mapping the {"innerKey1":"innerVal1","innerKey2":"innerVal1"} to InnerData
InnerData innerData = mapper.treeToValue(dinamycKeyNode.get(dynamicKey), InnerData.class);
JsonNode-dinamycKeyNode=mapper.readTree;

字符串dynamicKey=dinamycKeyNode.fieldNames().next()//您好,
fixedkey3
value结尾缺少一个
}
值?已@dariosicily修复它。谢谢你指出。那是个打字错误。实际json的结尾}正确。@HelpMatters“fixedKey3”的值是否总是出现在此结构中?@BuildSlayer fixedKey3是可选字段。如果它在源代码中有值,它将出现在json中,如果它在源代码中没有值,那么该字段将在json中被跳过。非常感谢@dariosicily。这很有效,欢迎你。