0

一部の JSON を Android の個別のオブジェクトに解析しようとしています。オブジェクトは、空白なしの終了ブレースと開始ブレース (「最初の終わり {2 番目の開始」) で区切られます。これまでのところ、私のコードではこれらのポイントが JSON 内のどこにあるかを見つけることができますが、オブジェクトを分割して保存するためにどのメソッドを使用すればよいかわかりません。JSON を取得して解析を試みるコードは次のとおりです。

public ArrayList<String> getQuestionJSONFromUrl(String url, List<NameValuePair> params) {

    // Making HTTP request
try {
        // defaultHttpClient
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);
        httpPost.setEntity(new UrlEncodedFormEntity(params));

        HttpResponse httpResponse = httpClient.execute(httpPost);
        HttpEntity httpEntity = httpResponse.getEntity();
        is = httpEntity.getContent();

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    try {
        ArrayList<String> questionsList = new ArrayList<String>();
        int count = 0;
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                is, "iso-8859-1"), 8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        String newLine = null;
        String newLine2 = null;
        int previousJ = 0;
        if ((line = reader.readLine()) != null) {
            for(int j = 0; j < line.length(); j++) {
                while (line.charAt(j) == '}' && line.charAt(j+1) == '{') {
                    //everything before j = 1 string
                    //everything after gets deleted because I can't think
                    //of anything better, yet                       
                    sb.append(line);
                    sb.delete(j+1, sb.length());
                    line = sb.toString();
                    questionsList.add(count, line);
                    //line = line.split("\\}\\{");
                    Log.v("forintbs", questionsList.toString());
                    count++;
                }
            }
        }
        is.close();
        json = sb.toString();            
    } catch (Exception e) {
        Log.e("Buffer Error", "Error converting result " + e.toString());
    }        
    // try parse the string to a JSON object
    try {
        jObj = new JSONObject(json);
    } catch (JSONException e) {
        Log.e("JSON Parser", "Error parsing data " + e.toString());
    } 
    // return JSON String
    return null; 
}

とにかく問題にならないので、明らかにメソッドは今のところ null を返しています。これまでのところ、ログを調べて出力を確認すると、arraylist は 1 つ長く、期待どおりに文字列を適切に取得していますが、残りの元のデータも期待どおりに削除されています。私が試したことを確認できるように、コードをそのまま残しました。誰か提案はありますか?サンプル JSON の一部を次に示します。

{"category":"elections","id":"0","title":"Who will you vote for in November's Presidential election?","published":"2012-04-02","enddate":"2012-04-30","responsetype":"0"}

{"category":"elections","id":"2","title":"Question title, ladies and gents","published":"2012-04-02","enddate":"2012-04-30","responsetype":"1"}

ArrayList を使用しなくても問題はありませんが、代わりに JSON オブジェクトの配列を使用します。昨日尋ねた質問で提案されているように、私は単に試しています。

編集〜ここに私のPHPスクリプトがあります:

<?php

define("DB_HOST", "localhost");
define("DB_USER", "*");
define("DB_PASSWORD", "*");
define("DB_DATABASE", "*");

mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
mysql_select_db(DB_DATABASE);
$sql=mysql_query("select * from QUESTIONS where CATEGORY like 'elections'");
while($row=mysql_fetch_assoc($sql)) {
$output[]=$row;
}
foreach($output as $value) {
echo json_encode($value);
}
?>
4

1 に答える 1

0

Marc B が言ったように、より強力で正確な PHP コードが必要でした。別の Stack Overflow ユーザーが、Marc B が理解を助けてくれたコードを改良するのを手伝ってくれました。JSON は適切にエンコードされたデータとして返されるようになりましたが、それを個別のオブジェクトに解析する方法はまだ決定していません。私はすぐにそこに着きます。

部分的な解決策は次のとおりです: https://stackoverflow.com/a/10019165/1231943

于 2012-04-04T21:38:11.570 に答える