java - 如何使用 Jackson 库将 json 映射对象转换为对象数组

标签 java json jackson

我有下一个 json:

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

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

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

不解析为 map 并迭代它来转换?

最佳答案

根据您粘贴的 json 的原样,我可以假设如下所示的类结构(...是的,您的 json 无法解析为您的 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"
        }
    ]
}

关于java - 如何使用 Jackson 库将 json 映射对象转换为对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31642974/

相关文章:

java - 线程等待时出现大量 IllegalMonitorStateException

json - VBA-Json 解析嵌套 Json

javascript - 我需要将键值对的对象转换为单独的列表项

javascript - 在java中读取javascript对象

java - ActionEvent 后的无限 while 或 for 循环在 swing 中不起作用。为什么?

java - 如何根据以纬度和经度为界的形状确定面积?

java - 无法添加maven远程目录

javascript - 有没有办法创建与 JSON.stringify(jsObject) 创建的 Java <-> JSON 映射对象完全相同的字符串?

java - 如何修复 FasterXml Jackson 中的 "Conflicting getter definitions for property"错误?

java - JsonMappingException : Can not deserialize instance of java. util.List 超出 START_OBJECT token