使用Jackson序列化Restlet列表

时间:2012-10-15 05:32:19

标签: json serialization jackson restlet

我正在连接图书馆。我得到List<List> foodItemsList

如何使用Jackson序列化foodItemsList?处理GET时会发生这种情况。

我已经了解了如何使用Jackson / Restlet序列化对象,但我无法弄清楚它是否有列表。

对于单个对象,这就是我的工作

@Get("json")
public Representation represent(Variant variant) throws ResourceException {
    :
    ObjectMapper mapper = new ObjectMapper(); 
    String myFinString = mapper.writeValueAsString(profileSupportedInfo);
    :
    return myFinstring
}

profileSupportedInfo中的成员数据的getter setter就是我提供的。

在创建mapper对象之前,这是我的调用

List<List> totalfoodItem = someMemberFunc();
ObjectMapper mapper = new ObjectMapper
// my question - how do I serialize totalFoodItem

JSON中totalFoodItem的首选表示如下所示

{
 "food":[
       {"name":"apple","img_loc":"123_apple.jpg","energ":210,"food_unit":"1"},
       {"name":"rice","img_loc":"134_rice.jpg","energ":123,"food_unit":"100 gm"},
       :
   ]
}

我缺少什么/不理解? 谢谢

1 个答案:

答案 0 :(得分:1)

我担心为了成功序列化List,你必须把它变成一个数组。 JVM不会使用适当的类型信息序列化列表(在反序列化时,您只需获取通用对象列表),这不是杰克逊的错。但是,如果序列化数组,则必须键入数组,并且数组中的对象也将保留其类型。

根据您想要的JSON,您似乎只需要一个可以收集食物信息的辅助类,如下所示:

public class Food {
    private String name;
    private String img_loc;
    private String energ;
    private String food_unit;
    public FoodItem(String name, String value, String energ, String food_unit) {
        this.name = name;
        this.value = values;
        this.energ = energ;
        this.food_unit = food_unit;
    }
}

现在您只需要一个具有Food对象数组作为属性的对象:

public class TotalFoodItem {
    private Food[] food;
    ...
}

您可以序列化该对象。杰克逊可能不会生成看起来与您想要的JSON完全相同的JSON(我自己没有尝试过这个代码),但它应该非常接近。