使用jackson

时间:2018-03-29 02:15:50

标签: json json-deserialization

我有来自firebase的这个json结构,它是一个对象列表,但每个对象的根是ID

id root for object, list

如何将此序列化为id / root作为成员变量的对象列表。这是针对Spring启动的,所以我更喜欢它是Jackson2解决方案。

这可能与Jackson JSON key as value in Java的问题相同,但我的答案更好,因为它不需要额外/无用的课程

2 个答案:

答案 0 :(得分:1)

    val reader = ObjectMapper().reader()
    val tree = reader.readTree(testJson)

    val eventList = mutableListOf<Event>()
    tree.fields().iterator().forEach {
        val event = Event(
                it.key,
                it.value.get("name").asText(),
                it.value.get("description").asText(),
                it.value.get("startDate").asText(),
                it.value.get("startTime").asText(),
                it.value.get("endDate").asText(),
                it.value.get("endTime").asText(),
                it.value.get("imageUrl").asText()
        )

        eventList.add(event)
    }

我找到了一个在kotlin中使用jackson的解决方案,它不是最漂亮的,但它有效。 fields方法返回子映射。所以,我正在遍历地图并添加密钥作为对象id成员,然后从嵌套地图中抓取其余数据。

答案 1 :(得分:0)

对不起,我不是杰克逊的专业人士。但是有一种简单的方法可以在JavaScript中转换你的对象 - 也许这将为可以移植到Jackson(java?)的东西奠定基础

这是执行转换的convertData函数:

var convertData = function (d) {
    var arr = [];
    for(var prop in data) 
    {
        var el = { "id": prop };
        var otherprops = data[prop];
        for(var otherprop in otherprops) 
        {
            el[otherprop] = otherprops[otherprop];
        }
        arr.push(el);
    }
    return arr;
}

Tnis是转换后的样本数据(与您的值略有不同):

  

[{&#34; id&#34;:&#34; -L8eoUd5mqJGnXDVSmb0&#34;,&#34;说明&#34;:&#34;有很好的描述&#34;,&#34; endDate& #34;:&#34; 12 /二千〇一十八分之三十一&#34;&#34;结束时间&#34;:&#34; 03:00&#34;&#34; IMAGEURL&#34;:&#34; /favicon.ico","name":"Here'sa Good Event&#34;,&#34; startDate&#34;:&#34; 12/01/2020& #34;&#34; STARTTIME&#34;:&#34; 12:00&#34;},{&#34; ID&#34;:&#34; -L8jO6Zhz976hvoLUiga&#34;&#34;描述& #34;:&#34;另一个项目&#34;,&#34; endDate&#34;:&#34; 12/30/2018&#34;,&#34; endTime&#34;:&#34; 03 :05&#34;,&#34; imageUrl&#34;:&#34; /favicon2.ico",&#34; name&#34;:&#34; Event#2&#34;,&#34 ;的startDate&#34;:&#34; 12 /二千零十八分之十一&#34;&#34; STARTTIME&#34;:&#34; 12:03&#34;}]

链接到JSFiddle:https://jsfiddle.net/2t1s2are/13/

希望这会有所帮助!!

相关问题