我正在尝试通过Chrome的高级REST客户端中的JSON字符串测试我的REST服务。我这里有一个嵌套的JSON。我把它作为字符串并将其映射到我的POJO类:
ObjectMapper mapper = new ObjectMapper();
mapper.readValue(addressString, AddressPOJO.class);
此处, addressString 包含下面给出的JSON字符串
{
"location":"[{\"Asia\":[{\"India\":[{\"city\":\"Bengaluru\"}]}], [{\"India\":[{\"city\":\"Mumbai\"}]}]}]
}
我的地址POJO有变量:
Map<String,?> location = new HashMap();
我正在通过
从POJO中检索值Map<String, ?> locations = addressPOJO.getLocation();
Iterator iterator1 = locations.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry pair1 = (Map.Entry)iterator1.next();
Map<String,?> cities = (Map<String,?>) pair1.getValue();
Iterator iterator2 = dataSets.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry pair2 = (Map.Entry)iterator2.next();
Map<String,?> city = (Map<String, ?>) pair2.getValue();
}
}
在这里,我只能检索第二个
条目[{\"India\":[{\"city\":\"Mumbai\"}]}]
我需要检索所有条目。我也试过像这样使用MultiMap
MultiMap cities = (MultiMap) pair1.getValue();
但编译器不接受这一点。请注意,所有条目都是动态的,并且(键,值)对根据用户的输入而变化。有关如何检索此示例中的所有条目的任何建议。
答案 0 :(得分:0)
根据我的理解,也许你需要研究两件事:
为什么location
的数据类型为Map<String, ?>
?因为根据您的JSON字符串,location
的类型是Array
或List
,对吗?如果您想将其设为Map
,请使用以下字符串:{"location" : "\"key\":\"value\""}
。如果您想将其设为List
,请删除值周围的&#34;&#34; 。
另一件事是,您似乎想要一个层次结构来描述某些地理结构。让我们说,在Asia
我们有India
和China
,而India
我们有Bengaluru
,China
我们有Chengdu
城市Asia
。因此List
的值也应该是India
,其中包含两个项China
和location
。所以你应该删除] 和 [这里,我认为这也是你只能检索第二个条目的原因。
以下是我的测试代码,我修改了您的JSON字符串和public class Location {
private List location;
public List getLocation() {
return location;
}
public void setLocation(final List location) {
this.location = location;
}
}
的数据类型。
<强> Location.java 强>
public class testJson {
private static ObjectMapper mapper = new ObjectMapper();
public static void main(final String[] args) throws JsonParseException, JsonMappingException, IOException {
final String locationString = "{\"location\":[{\"Asia\":[{\"India\":[{\"city\":\"Bengaluru\"}]}, {\"India\":[{\"city\":\"Mumbai\"}]}]}]}";
final Location location = mapper.readValue(locationString, Location.class);
System.out.println("finish");
}
}
<强> TestJSON.java 强>
{{1}}
然后所有条目和级别都可以。也许你可以尝试一下。
希望这会有所帮助。