PHPで作成したJSON形式のデータをAndroidで読み込んでみようとして、あれこれ探したがまもとに動くコードがなく難儀しました。

で、ようやく動くコードが出来たのでメモっておきます。

問題になることの多いのはPHP側のコードとファイルの作り方でした。

以下の構成で動作確認。

サーバー側は、さくらインターネット(PHP 5.2.17)。
クライアント側は、Android 2.3.4 (Xperia acro)。

一番引っかかったのが以下の点。

Android側で,
cannot be converted to JSONObject(JSONArray)が頻繁に出て、どうなってんの?という感じでした。

解決策

○PHP側でjson_encodeを使わない。
○ファイルは、UTF-8、BOM無しで保存する。






サンプル

【サーバー側PHP】

<?php
    $json = '{"value":[{"MemberID":"1","Name":"photo1","url":"http://example.com/1.jpg"},';
    $json .= '{"MemberID":"2","Name":"photo2","url":"http://example.com/2.jpg"},';
    $json .= '{"MemberID":"3","Name":"photo3","url":"http://example.com/3.jpg"}]}';
    print($json);
    //print(json_encode($json));//使わない
?>


【クライアント側】

HTTPリクエストで、データを取得するコードは省略

private void json_parse(String jsondata){
    
    try {
        JSONObject jsonResponse = new JSONObject(jsondata);
        
        JSONArray data = jsonResponse.getJSONArray("value");
        
        for(int i = 0; i < data.length(); i++){
            
            JSONObject c = data.getJSONObject(i);
            
            Log.d("ID",c.getString("MemberID"));
            Log.d("NAME",c.getString("Name"));
            Log.d("URL",c.getString("url"));
        }
        
        
} catch (JSONException e) {
    
    e.printStackTrace();
}
    
}