Java jackson-json对象解析

Java jackson-json对象解析,java,json,jackson,Java,Json,Jackson,我的任务是将Json解析为Java类 我试图解析的Json片段有点像树结构 这里的关键点是,parameterValue可以是字符串,也可以是参数名称/值对的另一个数组 我想使用Jackson mapper Response response = mapper.readValue(jsonObjstring, Response.class); 这里的问题是,我不知道如何在这里描述响应类,所以它可以由Jackson自动解析。如果可能的话 Json: 您可以尝试这个在线json-to-JavaPO

我的任务是将Json解析为Java类

我试图解析的Json片段有点像树结构

这里的关键点是,
parameterValue
可以是字符串,也可以是参数名称/值对的另一个数组

我想使用Jackson mapper

Response response = mapper.readValue(jsonObjstring, Response.class);
这里的问题是,我不知道如何在这里描述响应类,所以它可以由Jackson自动解析。如果可能的话

Json:


您可以尝试这个在线json-to-JavaPOJO映射器,它会生成所需的结果,并且对我来说非常方便


试一试,如果您在提供您收到的完整json时遇到任何困难,我们可以解决其他问题。

您可以试一试这个在线json到java pojo映射器,它会产生所需的结果,并且多次对我有用


尝试一下,如果您在提供完整的json时遇到任何困难,我们可以解决其他问题。

创建一个包含字段和getter/setter的POJO Response.java类,创建一个标准构造函数和一个包含字段的构造函数,以及一个toString方法()。我将向您展示一个带有注释的示例

定义类,如:

@JsonAutoDetect
@JsonSerialize
public class Response implements Serializable
然后你的田地

@JsonProperty
private String parameterName;
最后是你的构造器f.e.像这样

@JsonCreator
public Response(@JsonProperty("parameterName") String parameterName) {
    this.parameterName = parameterName;
}

创建一个包含字段和getter/setter的POJO Response.java类,创建一个标准构造函数和一个包含字段的构造函数,以及一个toString方法()。我将向您展示一个带有注释的示例

定义类,如:

@JsonAutoDetect
@JsonSerialize
public class Response implements Serializable
然后你的田地

@JsonProperty
private String parameterName;
最后是你的构造器f.e.像这样

@JsonCreator
public Response(@JsonProperty("parameterName") String parameterName) {
    this.parameterName = parameterName;
}
我把它定义为

私有列表结果参数

然后jackson maper将其(对象)解析为LinkedHashMapEnty(当它是最终值时),或者解析为ArrayList(如果它不是一个值而是另一个值列表)

它可以关闭

我把它定义为

package test;

import java.io.IOException;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

public class Test {

    public static void main(String[] args) {

        String readJsonAsString = "[{\r\n  \"parameterName\" : \"name\",\r\n  \"parameterValue\" : \"value\"\r\n}, {\r\n  \"parameterName\" : \"apnRecord\",\r\n  \"parameterValue\" : [{\r\n     \"parameterName\" : \"name\",\r\n     \"parameterValue\" : \"value\"\r\n  }, {\r\n     \"parameterName\" : \"name\",\r\n     \"parameterValue\" : \"value\"\r\n  }, {\r\n     \"parameterName\" : \"name\",\r\n     \"parameterValue\" : \"value\"\r\n  }, {\r\n     \"parameterName\" : \"name\",\r\n     \"parameterValue\" : \"value\"\r\n  }, {\r\n     \"parameterName\" : \"name\",\r\n     \"parameterValue\" : \"value\"\r\n  }, {\r\n     \"parameterName\" : \"name\",\r\n     \"parameterValue\" : \"value\"\r\n  }]\r\n}]";

        try {

            ObjectMapper mapper = new ObjectMapper();
            JsonNode jsonNodes = mapper.readTree(readJsonAsString.toString());
            for (JsonNode jsonNode : jsonNodes) {
                System.out.println(jsonNode.get("parameterName"));
            }


        } catch (JsonProcessingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}
私有列表结果参数

然后jackson maper将其(对象)解析为LinkedHashMapEnty(当它是最终值时),或者解析为ArrayList(如果它不是一个值而是另一个值列表)

它可以关闭

package test;

import java.io.IOException;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

public class Test {

    public static void main(String[] args) {

        String readJsonAsString = "[{\r\n  \"parameterName\" : \"name\",\r\n  \"parameterValue\" : \"value\"\r\n}, {\r\n  \"parameterName\" : \"apnRecord\",\r\n  \"parameterValue\" : [{\r\n     \"parameterName\" : \"name\",\r\n     \"parameterValue\" : \"value\"\r\n  }, {\r\n     \"parameterName\" : \"name\",\r\n     \"parameterValue\" : \"value\"\r\n  }, {\r\n     \"parameterName\" : \"name\",\r\n     \"parameterValue\" : \"value\"\r\n  }, {\r\n     \"parameterName\" : \"name\",\r\n     \"parameterValue\" : \"value\"\r\n  }, {\r\n     \"parameterName\" : \"name\",\r\n     \"parameterValue\" : \"value\"\r\n  }, {\r\n     \"parameterName\" : \"name\",\r\n     \"parameterValue\" : \"value\"\r\n  }]\r\n}]";

        try {

            ObjectMapper mapper = new ObjectMapper();
            JsonNode jsonNodes = mapper.readTree(readJsonAsString.toString());
            for (JsonNode jsonNode : jsonNodes) {
                System.out.println(jsonNode.get("parameterName"));
            }


        } catch (JsonProcessingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}
首先需要将json转换为字符串格式,然后由ObjectMapper将其转换为树结构

为此,您需要使用3个罐子: jackson-annotations-2.3.5.jar jackson-core-2.3.5.jar jackson-databind-2.3.5.jar

首先需要将json转换为字符串格式,然后由ObjectMapper将其转换为树结构

为此,您需要使用3个罐子: jackson-annotations-2.3.5.jar jackson-core-2.3.5.jar
jackson-databind-2.3.5.jar

共享您的代码段,而不是仅仅抛出
json
共享您的代码段,而不是仅仅抛出
json
,但是当值可能是字符串或数组时,这个pojo应该是什么样子呢?tomas,这个参数名是字符串,如果您想要更多像parameterValue这样的变量,只需按如下所示定义它们,如果您问如何将这些解析为arraylist,我会这样做->arraylist images=jsonMapper.readValue(json,jsonMapper.getTypeFactory().ConstructionType(arraylist.class,Image.class));但是当值可能是字符串或数组时,这个pojo应该是什么样子呢?托马斯,这个parametername是一个字符串,如果你想要更多像parameterValue这样的变量,请按图中所示定义它们,如果你问如何将它们解析成arraylist,我会这样做->arraylist images=jsonMapper.readValue(json,jsonMapper.getTypeFactory().ConstructionCollectionType(ArrayList.class,Image.class));