我从Fitbit API获取json字符串。我想在List对象中保存dateTime和value字段。我正在使用杰克森模块kotlin。我为此创建了ActivitiesSteps数据类。
我不知道如何避免“活动步骤”字段而且我被卡住了。
这是JSON主体(在我的代码中以变量'jsonSteps'提供给readValue方法):
$('#dialog_confirm').bind('dialogclose', function(event, ui) {
if($(event.target).text() != 'Cancel') {
console.log("Clicked Confirm");
$.ajax({
url: "check-domain-remove.php",
type: "post",
dataType: 'json',
data: $('#remove_domain_form').serialize(),
success: function (response) {
if (response === "Success") {
//DO OTHER STUFF
var success_div = '<p class=\"input--success\">Domain Successfully Removed</p><br><br>';
$('body').append(success_div);
}
}
});
}
});
这是我保存数据的课程:
{
"activities-steps":[
{
"dateTime":"2018-04-17",
"value":"11045"
},
{
"dateTime":"2018-04-18",
"value":"14324"
},
{
"dateTime":"2018-05-16",
"value":"11596"
}
]
}
这是我使用jackson的代码:
data class ActivitiesSteps(var dateTime: String, var value: String)
抛出以下异常:
val mapper = jacksonObjectMapper()
val stepsList = mapper.readValue<List<ActivitiesSteps>>(jsonSteps)
答案 0 :(得分:2)
您需要拥有一个与JSON顶级匹配的外部对象。在这种情况下,请将代码更改为:
data class ActivityConfig(
@JsonProperty("activities-steps") val steps: List<ActivitiesSteps> = emptyList()
)
data class ActivitiesSteps(var dateTime: String, var value: String)
val stepsList = mapper.readValue<ActivityConfig>(jsonSteps).steps
如果您希望列表始终存在,您可以使用Jackson Kotin模块的默认值,如果需要,您也不需要数据类中的var
成员,val
正常工作除非你真的想改变这些价值观,否则杰克逊也会如此。
答案 1 :(得分:0)
问题在于,你试图得到的数组被包裹在一个对象中,你正在向杰克逊提供并要求返回List。 JSON object-to-Java List不是Jackson理解的翻译,所以它很窒息。
我会创建一个包装List并尝试反序列化的类。