问题描述
假设一个数组只能在内部包含Maps(而不是其他数组):
public void findNode(HashMap map) {
for(HashMap.Entry<String, Object> entry : map.entrySet()){
Object value = entry.getValue();
if(value instanceof String)
System.out.println("value = "+value);
else if(value instanceof HashMap)
findNode(value);
else if(value instanceof HashMap[])
for(int i=0; i<array.length(); i++){
findNode(array[i]);
}
}
或者,如果您可以使用3个功能,则可以使其更简单
public void findNode(HashMap map) {
for(HashMap.Entry<String, Object> entry : map.entrySet()){
findNode(entry.getValue());
}
}
public void findNode(String value) {
System.out.println("value = "+value);
}
public void findNode(HashMap[] value) {
for(int i=0; i<array.length(); i++){
findNode(array[i]);
}
}
解决方法
我有一个类似于以下内容的JSON字符串:
{
"foo" : "bar","id" : 1,"children":[
{
"some" : "string","id" : 2,children : []
},{
"some" : "string",children : []
}
]
}
我对此字符串进行了JSON解析,然后将所有对象转换为HashMaps,并将所有数组转换为HashMap []
s。我的问题是我需要一个递归函数来遍历Java中此JSON结构的所有节点。我怎样才能做到这一点?我在想类似的东西:
public HashMap findNode(boolean isArray,HashMap map,HashMap[] array){
//array stuff
if(isArray){
for(int i=0; i<array.length(); i++){
Object value = array[i];
if(value instanceof String)
System.out.println("value = "+value);
else if(value instanceof HashMap)
findNode(false,value,null);
else if(value instanceof HashMap[])
findNode(true,null,value);
}
//hashmap stuff
}else{
for(HashMap.Entry<String,Object> entry : map.entrySet()){
Object value = entry.getValue();
if(value instanceof String)
System.out.println("value = "+value);
else if(value instanceof HashMap)
findNode(false,value);
}
}
}