我有下一个 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/