问题描述
我有下一个json:
{
"blabla": {
"1": {
"foo": "foo1",
"bar": "bar1"
},
"22": {
"foo": "foo22",
"bar": "bar22"
}
}
}
它是int到对象的映射。
有没有一种方法可以将其转换为对象数组,例如:
class FooBar
{
public int id;
public String foo;
public String bar;
}
没有解析为地图并对其进行迭代以进行转换?
1楼
根据您粘贴的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"
}
]
}