Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.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_Jackson - Fatal编程技术网

Java 使用自定义类名反序列化具有不同根名称的json

Java 使用自定义类名反序列化具有不同根名称的json,java,json,jackson,Java,Json,Jackson,我有一个json具有以下结构: { "results": [ { "listingPrice": "free", "shortDescription": "desc", "title": "one", }, { "listingPrice": "free", "shortDescription": "desc",

我有一个json具有以下结构:

{
    "results": [
        {
            "listingPrice": "free",
            "shortDescription": "desc",
            "title": "one",
        },
        {
            "listingPrice": "free",
            "shortDescription": "desc",
            "title": "two",
        }

    ]

}
相应的类别为:

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
        "results"
})
public class ResultsHolder {
    @JsonProperty("results")
    private List<Results> results = null;

    @JsonProperty("results")
    public List<Results> getResults() {
        return results;
    }

    @JsonProperty("results")
    public void setResults(List<Results> results) {
        this.results = results;
    }
}

读作

objMapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
ResultsHolder res = objMapper.readValue(new URL(url), ResultsHolder.class);
List<Results> cons  = res.getResults();

objMapper.configure(反序列化功能。接受单个值作为数组,true);
ResultsHolder res=objMapper.readValue(新URL,ResultsHolder.class);
List cons=res.getResults();
1) 现在我不希望我的类被称为Results,而是Listing。我该怎么做

2) 是否可以避免使用ResultsHolder而直接将json作为列表或数组读取

  • 您可以将您的
    名称更改为您想要的任何内容,而不是结果,但您必须确保在ResultsHolder

  • 是的,可以直接读取列表

    List cons=objMapper.readValue(新的URL,新的TypeReference(){})


  • 有关详细信息,您可以查看您的第一个问题,您的意思是“我不希望我的类被称为结果,而是列表”?您可以使用新名称重构它。顺便说一句,您不必为每个变量或方法添加
    @JsonProperty
    ,因为它们的名称与JSON字符串中的字段名称相同。感谢1)我在尝试时也更改了变量名称。你能详细说明一下吗?
    objMapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
    ResultsHolder res = objMapper.readValue(new URL(url), ResultsHolder.class);
    List<Results> cons  = res.getResults();