2015-12-23 7 views
9

JSONArrayを拡張してfor(:)ループで使用できるような構文上の方法があれば私は興味があります。JSONArrayをオーバーロードして、ループ内の通常のリストのように動作する方法はありますか?

ので、代わりにやってたの:

for(int i = 0; i< myJsonArray.length(); i++){ 
    myJsonArray.getString(i); 
} 

私は私が上記の例では、アレイ内のオブジェクトであることを確認する必要があることを実感

for(String s : myJsonArray); 

をやりたいですJSONArraysは問題ではないはずのいくつかの型しか扱えないことを考えると、実際にはStringです。

+0

私はライブラリを使用しないとそうは思わない。 –

+0

可能な公約:http://stackoverflow.com/questions/11527214/java-convert-a-json-string-to-an-array –

+0

[チェック](http://stackoverflow.com/questions/9151619/java- iterate-over-jsonobject)これはJSONObjectのためのものですが、org.json.simpleが必要です – Skynet

答えて

5

なし:私はことを実現

public static Iterable<String> iterable(final JSONArray array) { 
    return new Iterable<String> { 
     Iterator<String> iterator() { 
      return new Iterator<String> { 
      int i = 0; 

      boolean hasNext(){ 
       return i < array.length(); 
      } 

      String next(){ 
       return array.getString(i++); 
      } 

      void remove(){ 
       throw new RuntimeException(); //implement if you need it 
      } 
      } 
     } 
    }; 
} 

for(String s : iterable(myJsonArray)) 

そして、そのようなiterable方法の何かを書きません上の例では配列のオブジェクトが実際にはStringであることを確認する必要があります

まあ実際にはStringでないかのように、とにかくcoerced to a Stringになります。

1

これは拡張forループとして知られています。 ref

この機能を利用するには、コレクションにIterableを実装する必要があります。 (またはIterableが必要です) これはあなたがやる方法です、use enhanced for loop with your classです。

JsonArrayではありません。所望構文に微調整して、あなたができない:-)

+0

私はよく見ています。しかし、ありがとう! –

関連する問題