使用JSON / Jackson时如何处理消息包装器

时间:2012-11-21 16:59:09

标签: json spring jackson

我正在尝试使用基于JSON的服务,该服务在其响应中使用包装器。包装器看起来像这样:

{
    "errors": [
        {
            "message": "some message",
            "code": "possibly some error code"
        }
    ],
    "result": [],
    "metadata": {
        "limit": 100,
        "offset": 0,
        "total": 5
    }
}

“结果”可能包含一个对象或一个对象数组。例如,如果我正在调用“apple”服务,我会在结果中获得一个苹果对象或一组苹果对象。同样,如果我正在调用“橙色”服务,我会在结果中获得橙色对象或橙色对象数组。

问题是,如何使用杰克逊对其进行反序列化?

谢谢,

1 个答案:

答案 0 :(得分:0)

也许这会对你有所帮助:

List<artikli> lista = new ArrayList<artikli> (Testni_podaci ());    
        Gson gson = new Gson();

             //list to JSON
        String  JsonString = gson.toJson(lista);

        System.out.println( JsonString +"\n");

        JsonParser parser = new JsonParser ();
        JsonElement element = parser.parse( JsonString);
        JsonArray arrays = element.getAsJsonArray();  

           //JSON to list
        List<artikli> JsonToList = new ArrayList<artikli> (); 
        for(int i=0;i<arrays.size();i++){

        JsonElement e =arrays.get(i);
        artikli k = new artikli();
        k=gson.fromJson(e,artikli.class);
            JsonToList.add(k);
    }

测试数据:

public static  List<artikli> Testni_podaci (){

        List<artikli> lista = new ArrayList<artikli> ();
        kategorijaartikla kateg = new kategorijaartikla();

        kateg.setId(5);
        kateg.setKategorija("kategorijaa");


        artikli temp = new artikli();
        temp.setId(1);

        temp.setNaziv("artikl 1");
        temp.setKategorijaartikla(kateg);
        lista.add(temp);

        temp = new artikli();
        temp.setId(2);
        temp.setNaziv("artikl 2");
        temp.setKategorijaartikla(kateg);
        lista.add(temp);

        return lista;

    }