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
Java 使用带有动态字段的Jackson注释反序列化JSON_Java_Json_Jackson_Deserialization_Pojo - Fatal编程技术网

Java 使用带有动态字段的Jackson注释反序列化JSON

Java 使用带有动态字段的Jackson注释反序列化JSON,java,json,jackson,deserialization,pojo,Java,Json,Jackson,Deserialization,Pojo,我有一个来自WebAPI的json响应,格式如下: { "Status": "Successful Request", "ErrorCode": 200, "ResultCount": 1, "Trends": { "39381": { "user_distance_units": 1, "total_sep": 0, "max_power": 0, "

我有一个来自WebAPI的json响应,格式如下:

{
    "Status": "Successful Request",
    "ErrorCode": 200,
    "ResultCount": 1,
    "Trends": {
        "39381": {
            "user_distance_units": 1,
            "total_sep": 0,
            "max_power": 0,
            "max_rpm": 0,
            "max_heart_rate_bpm": 0,
            "distance": 0,
            "avg_power": 0,
            "avg_rpm": 0,
            "avg_hr": 0,
            "calories": 0,
            "classes": "0",
            "max_avg_power": 0,
            "max_avg_rpm": 0,
            "max_avg_hr": 0
        }
    }
}
我正试图把它映射到一个POJO。我在使用Jackson注释时遇到了一些困难。39381是一个客户机ID,出于某种原因,Web服务会将其与响应一起提供。该客户端ID是动态的,并且会随着不同用户的每次调用而变化。在这个例子中,我似乎无法使用Jackson注释@JsonProperty。映射变得更加复杂。因为我真的不需要客户机ID信息,所以我真的想跳过它,只需将数据映射到这个Trends类:

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({ "user_distance_units", "total_sep", "max_power", "max_rpm", "max_heart_rate_bpm", "distance",
        "avg_power", "avg_rpm", "avg_hr", "calories", "classes", "max_avg_power", "max_avg_rpm", "max_avg_hr" })
public class Trends
{

    @JsonProperty("user_distance_units")
    private Integer userDistanceUnits;
    @JsonProperty("total_sep")
    private Integer totalSep;
    @JsonProperty("max_power")
    private Integer maxPower;
    @JsonProperty("max_rpm")
    private Integer maxRPM;
    @JsonProperty("max_heart_rate_bpm")
    private Integer maxHeartRateBPM;
    @JsonProperty("distance")
    private Integer distance;
    @JsonProperty("avg_power")
    private Integer avgPower;
    @JsonProperty("avg_rpm")
    private Integer avgRPM;
    @JsonProperty("avg_hr")
    private Integer avgHr;
    @JsonProperty("calories")
    private Integer calories;
    @JsonProperty("classes")
    private Integer classes;
    @JsonProperty("max_avg_power")
    private Integer maxAvgPower;
    @JsonProperty("max_avg_rpm")
    private Integer maxAvgRPM;
    @JsonProperty("max_avg_hr")
    private Integer maxAvgHr;
    @JsonIgnore
    private Map<String, Object> additionalProperties = new HashMap<String, Object>();
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({“用户距离单位”、“总sep”、“最大功率”、“最大rpm”、“最大心率”、“距离”,
“平均功率”、“平均转速”、“平均心率”、“卡路里”、“等级”、“最大平均功率”、“最大平均转速”、“最大平均心率”})
公共阶级趋势
{
@JsonProperty(“用户距离单位”)
私有整数用户距离单位;
@JsonProperty(“总sep”)
私有整数totalSep;
@JsonProperty(“最大功率”)
专用整数maxPower;
@JsonProperty(“最大转速”)
私有整数maxpm;
@JsonProperty(“最大心率每分钟”)
私有整数maxHeartRateBPM;
@JsonProperty(“距离”)
私有整数距离;
@JsonProperty(“平均功率”)
专用整数avgPower;
@JsonProperty(“平均rpm”)
私有整数avgRPM;
@JsonProperty(“平均人力资源”)
私有整数avgHr;
@JsonProperty(“卡路里”)
私人整数卡路里;
@JsonProperty(“类”)
私有整数类;
@JsonProperty(“最大平均功率”)
专用整数maxAvgPower;
@JsonProperty(“最大平均转速”)
私有整数maxAvgRPM;
@JsonProperty(“最大平均小时”)
私有整数maxAvgHr;
@杰索尼奥雷
私有映射additionalProperties=new HashMap();

有什么方法可以做到这一点吗?

趋势将作为键入ClientId的地图返回。 因此,您可以使用内部趋势图定义顶级响应对象:

   class Response {
    @JsonProperty("Status")
    private String status;
    @JsonProperty("ErrorCode")
    private  int errorCode;
    @JsonProperty("ResultCount")
    private  int resultCount;
    @JsonProperty("Trends")
    private Map<String, Trends> trends;
   }
类响应{
@JsonProperty(“状态”)
私有字符串状态;
@JsonProperty(“错误代码”)
私人内部错误代码;
@JsonProperty(“结果帐户”)
私有int-resultCount;
@JsonProperty(“趋势”)
私人地图趋势;
}

如果您不关心客户端ID,您可以添加一个getter,该getter仅尝试返回映射的第一个元素。

我很感激,我在过去的一个小时里尝试了类似的操作。没有正确设置映射。我感谢您的帮助。