当前位置: 代码迷 >> java >> 如何使用杰克逊库将JSON映射对象转换为对象数组
  详细解决方案

如何使用杰克逊库将JSON映射对象转换为对象数组

热度:64   发布时间:2023-07-17 20:34:28.0

我有下一个json:

{
    "blabla": {
        "1": {
            "foo": "foo1",
            "bar": "bar1"
        },
        "22": {
            "foo": "foo22",
            "bar": "bar22"
        }
    }
}

它是int到对象的映射。
有没有一种方法可以将其转换为对象数组,例如:

class FooBar
{
    public int id;
    public String foo;
    public String bar;
}

没有解析为地图并对其进行迭代以进行转换?

根据您粘贴的json原样,我可以假设如下所示的类结构(...是的,您的json不能按FooBar解析为FooBar类。因为json表示id为键,但是FooBar类包含id为成员变量。因此,它们不能互相转换。):

class FooBar {                                             
    public String foo;                                     
    public String bar;                                     
};                                                         

class FooBarObject {                                       
    public HashMap<String, FooBar> blabla;                 
    public void setBlabla(HashMap<String, FooBar> blabla) {
        this.blabla = blabla;                              
    }                                                      
    public HashMap<String, FooBar> getBlabla() {           
        return blabla;                                     
    }                                                      
};                                                         

而且,这是示例代码。

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

/**
 * Hello world!
 */
class FooBar {
    public String foo;
    public String bar;
};

class FooBarObject {
    public HashMap<String, FooBar> blabla;
    public void setBlabla(HashMap<String, FooBar> blabla) {
    this.blabla = blabla;
    }
    public HashMap<String, FooBar> getBlabla() {
    return blabla;
    }
};

public class App {

    static String target = ""
    + "{"
    + "    \"blabla\": {"
    + "        \"1\": {"
    + "            \"foo\": \"foo1\","
    + "            \"bar\": \"bar1\""
    + "        },"
    + "        \"22\": {"
    + "            \"foo\": \"foo22\","
    + "            \"bar\": \"bar22\""
    + "        }"
    + "    }"
    + "}";

    public static void main(String[] args) throws Exception {

    FooBarObject blabla = new FooBarObject();
    HashMap map = new HashMap<String, FooBar>();
    map.put("1", new FooBar());
    map.put("22", new FooBar());
    blabla.setBlabla(map);

        ObjectMapper mapper = new ObjectMapper();
        String json = mapper.writeValueAsString(blabla);

    System.out.println("--- BEGIN ---");
        System.out.println(json);
    System.out.println("--- END ---");

    blabla = mapper.readValue(target, FooBarObject.class);
    System.out.println("--- BEGIN ---");
    for ( Map.Entry<String, FooBar> entry : blabla.blabla.entrySet() ) {
        String internal = mapper.writeValueAsString(entry.getValue());
        System.out.println(entry.getKey() + ": " + internal);
    }
    System.out.println("--- END ---");
    }
}

但是,我想已经有问题了...您实际上要使用Array吗?

{
    "blabla": [
        "1": {
            "foo": "foo1",
            "bar": "bar1"
        },
        "22": {
            "foo": "foo22",
            "bar": "bar22"
        }
    ]
}
  相关解决方案