2012-02-18 40 views
1

私は次のようなJSON文字列を持っている:反復処理

{ 
    "foo" : "bar", 
    "id" : 1, 
    "children":[ 
     { 
      "some" : "string", 
      "id" : 2, 
      children : [] 
     }, 
     { 
      "some" : "string", 
      "id" : 2, 
      children : [] 
     } 
    ] 
} 

私は、この文字列のJSONの解析を行い、それはハッシュマップとHashMapの[]の中のすべての配列にすべてのオブジェクトをオンにします。私の問題は、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, null); 
      else if(value instanceof HashMap[]) 
       findNode(true, null, value); 
     } 
    } 
} 

答えて

2

:私のようなものを考えていた

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]); 
    } 
} 
+1

実際には、2番目の部分はうまくいきません。あいまいな呼び出しでコンパイルエラーが発生します(多態性を使用せずに関数をオーバーロードしているため)。ごめんなさい – Luis