2016-08-15 6 views
1

私は私がJSON配列に追加人々のオブジェクトのリストを持って、このアンドロイド:文字列

[{"fName":"Bob","lName":"Smoe","info":"is tall"},{"fName":"Claire","lName":"Smoegan","info":"has a big forehead"}] 

のようなルックスを使用する必要がJSONファイル形式にJSON配列を解析する方法。コードは問題がある。この

for (int i = 0; i < peopleList.size(); i++){ 
     try { 
      jArray.put(peopleList.get(i)); 
     }catch (Exception e){ 
      e.printStackTrace(); 
     } 
} 

のように見える、私は、ファイルに書き込むために、文字列に変換する必要がありますが、私が使用している場合、「jArray.toStringは()」それは

"["[email protected]", "[email protected]", "[email protected]"....] 

を返します。上記の形式で返すにはどうすればよいですか?

+1

まず、*解析*ではありません。構文解析はもう一つの方法です(文字列をjsonに変換する)。次に、 'jArray'が何であるかによって異なります。 – Andreas

+0

jArrayはJSONArrayです – zachThePerson

答えて

3

JSONArrayput()のルールに従っていません。パラメータは次のようになっています。

JSONObject、JSONArray、String、Boolean、Integer、Long、Double、NULL、またはnullです。 NaNや無限大ではないかもしれません。サポートされていない値は許可されておらず、配列は不整合な状態になります。

com.example.zach.projectFile.Personである。 JSONArrayが行っていることは、PersonオブジェクトのtoString()を呼び出して、その値を配列の値として使用することです。

選択肢は次のとおりです。

  1. は(例えば、JSONになって、JSONObjectは、{"fName":"Bob","lName":"Smoe","info":"is tall"}のようなものになり)PersonJSONObject表現を返し、PersontoJSONObject()のようなものを実装します。次にput(peopleList.get(i).toJSONObject()を使用してJSONArrayと記入してください。

  2. Gsonのようなクラスorg.jsonより洗練されたものを使用してください。

また、Andreasのメモは正しいです。あなたはJSONを解析していません。あなたはJSONを生成しています。 JSONを解析すると、JSONを含むStringPersonオブジェクトに変換されます。

+0

私は奇妙な問題を抱えています。私はjsonObj.put( "fName"、fName);)を使用して答えを待っている間、同様のことをしましたが、jArray.put(jsonObj)を使用して配列にオブジェクトを配置するたびに問題が発生します。最後のオブジェクトだけを入力した配列を入力します。だから10人がいて、最後のものが「クライド」の場合、jArrayには10個のエントリがありますが、それらはすべてクライドのものです。手順を進めると、すべてのオブジェクトのプロパティが追加されますが、jArray.put()メソッドで配列が上書きされます。助言がありますか? – zachThePerson

+0

@zachThePerson: 'Person'ごとに新しい' JSONObject'インスタンスを作成します。あなたは同じものを再利用しているように思えます。 – CommonsWare

+0

感謝!私は "JSONObject jsonObj =新しいJSONObject();"を移動しました。ループに入り、完全に機能しました! – zachThePerson

関連する問題