解析while循环中的json数据

时间:2016-04-24 15:55:49

标签: php android json

我正在为学校开展一个小项目,对于这个项目,我需要解析来自编码为json的数据库中的数据。现在我已经成功地只编码了一个对象,但并不是所有正在检索的对象。

传输一个对象的代码:

Response.Listener<String> responseListener2 = new Response.Listener<String>() {
@Override
public void onResponse(String response) {
    try {
        JSONObject jsonObject2 = new JSONObject(response);
        Log.i("HIAAAAAAAAAAAAAA", response);
        boolean tweet_success = jsonObject2.getBoolean("tweet_succes");
        String tweet_sendbyuser = jsonObject2.getString("tweet_send_by_user");
        String tweet_description = jsonObject2.getString("tweet_description");
        String tweet_favourites = jsonObject2.getString("tweet_favourites");
        String tweet_retweets = jsonObject2.getString("tweet_retweets");
        String tweet_reactions = jsonObject2.getString("tweet_reactions");
        boolean tweet_isReaction = jsonObject2.getBoolean("tweet_isReaction");
        String tweet_reactedTo = jsonObject2.getString("tweet_reactedTo");
        String tweet_dateSend = jsonObject2.getString("tweet_dateSend");
        Tweet tweet = new Tweet(tweet_sendbyuser, tweet_description, tweet_favourites, tweet_retweets, tweet_reactions, tweet_isReaction, tweet_reactedTo);
        LoggedInDetails.getInstance().addTweet(tweet);
        if (tweet_success) {
            Toast.makeText(LoginActivity.this, "Parsing done", Toast.LENGTH_SHORT).show();
            Intent intent = new Intent(getApplicationContext(), HomeActivity.class);
            intent.putExtra("username", LoggedInDetails.getInstance().getUsername());
            intent.putExtra("password", LoggedInDetails.getInstance().getPassword());
            startActivity(intent);
        } else {
            Toast.makeText(LoginActivity.this, "Error during parsing", Toast.LENGTH_SHORT).show();
        }
    } catch (JSONException e) {
        e.printStackTrace();
        Log.i("", response);
    }
}};

然后有我用来解析返回的所有数据的代码。然而,这样做是从第一行创建11个单独的对象,但仍然没有对第二行或任何行做任何事情:

Response.Listener<String> responseListener2 = new Response.Listener<String>() {
@Override
public void onResponse(String response) {
    try {
        JSONObject jObject = new JSONObject(response.trim());
        Iterator<?> keys = jObject.keys();
        boolean tweet_success = false;
        while (keys.hasNext()) {
            String key = (String) keys.next();
            Log.i("HIAAAAAAAAAAAAAA", response);
            tweet_success = jObject.getBoolean("tweet_succes");
            String tweet_sendbyuser = jObject.getString("tweet_send_by_user");
            String tweet_description = jObject.getString("tweet_description");
            String tweet_favourites = jObject.getString("tweet_favourites");
            String tweet_retweets = jObject.getString("tweet_retweets");
            String tweet_reactions = jObject.getString("tweet_reactions");
            boolean tweet_isReaction = jObject.getBoolean("tweet_isReaction");
            String tweet_reactedTo = jObject.getString("tweet_reactedTo");
            String tweet_dateSend = jObject.getString("tweet_dateSend");
            Tweet tweet = new Tweet(tweet_sendbyuser, tweet_description, tweet_favourites, tweet_retweets, tweet_reactions, tweet_isReaction, tweet_reactedTo);
            LoggedInDetails.getInstance().addTweet(tweet);

        }if (tweet_success) {
            Toast.makeText(LoginActivity.this, "Parsing done", Toast.LENGTH_SHORT).show();
            Intent intent = new Intent(getApplicationContext(), HomeActivity.class);
            intent.putExtra("username", LoggedInDetails.getInstance().getUsername());
            intent.putExtra("password", LoggedInDetails.getInstance().getPassword());
            startActivity(intent);
        } else {
            Toast.makeText(LoginActivity.this, "Error during parsing", Toast.LENGTH_SHORT).show();
        }
    } catch (JSONException e) {
        e.printStackTrace();
        Log.i("", response);
    }
}};

然后是我的collect_tweet.php(仅限重要部分)

if($fetch_tweets->execute()){
        $response1 = array();
        $response1["tweet_succes"] = false;
        while($row = $fetch_tweets->fetch(PDO::FETCH_ASSOC)){
            $response1["tweet_succes"] = true;
            $response1["succes"] = true;
            $response1["tweet_id"] = $row["tweet_id"];
            $response1["tweet_send_by_user"] = $row['tweet_sendbyuser'];
            $response1["tweet_description"] = $row['tweet_description'];
            $response1["tweet_favourites"] = $row['tweet_favourites'];
            $response1["tweet_retweets"] = $row['tweet_retweets'];
            $response1["tweet_reactions"] = $row['tweet_reactions'];
            $response1["tweet_isReaction"] = $row['tweet_isReaction'];
            $response1["tweet_reactedTo"] = $row['tweet_reactedTo'];
            $response1["tweet_dateSend"] = $row['tweet_dateSend'];
            echo json_encode($response1);
        }
    }else{
        $response1["tweet_succes"] = false;
        echo json_encode($response1);
    }

我目前在浏览器中获得的部分JSON :(虚拟测试数据)

{
    "tweet_succes":true,
    "succes":true,
    "tweet_id":"1",
    "tweet_send_by_user":"1",
    "tweet_description":"Ja ik weet niet zo goed wat de eerste tweet moest zijn, dus dit is em maar he",
    "tweet_favourites":"2, 3, 4",
    "tweet_retweets":"2, 3, 4",
    "tweet_reactions":"",
    "tweet_isReaction":"false",
    "tweet_reactedTo":"-1",
    "tweet_dateSend":"2016-04-23 23:39:49"
}
{
    "tweet_succes":true,
    "succes":true,
    "tweet_id":"2",
    "tweet_send_by_user":"2",
    "tweet_description":"Ja ik weet niet zo goed wat de eerste tweet moest zijn, dus dit is em maar he",
    "tweet_favourites":"2, 3, 4",
    "tweet_retweets":"2, 3, 4",
    "tweet_reactions":"",
    "tweet_isReaction":"false",
    "tweet_reactedTo":"-1",
    "tweet_dateSend":"2016-04-23 23:40:49"
} 

我可能解析它错了或者我需要使用JSONArray而不是object。

我的目标是根据我收到的数据发送推文。

提前致谢〜

1 个答案:

答案 0 :(得分:0)

您将返回多个单个数组,而不是构建一个数组数组并一次性返回它。

这会将所有数据构建到一个回复​​中

$response1 = array();
$response1["tweet_succes"] = false;
if($fetch_tweets->execute()){
    $response1["tweet_succes"] = true;
    $response1["succes"] = true;

    while($row = $fetch_tweets->fetch(PDO::FETCH_ASSOC)){
        $t = array();
        $t["tweet_id"] = $row["tweet_id"];
        $t["tweet_send_by_user"] = $row['tweet_sendbyuser'];
        $t["tweet_description"] = $row['tweet_description'];
        $t["tweet_favourites"] = $row['tweet_favourites'];
        $t["tweet_retweets"] = $row['tweet_retweets'];
        $t["tweet_reactions"] = $row['tweet_reactions'];
        $t["tweet_isReaction"] = $row['tweet_isReaction'];
        $t["tweet_reactedTo"] = $row['tweet_reactedTo'];
        $t["tweet_dateSend"] = $row['tweet_dateSend'];
        $response1[] = $t;
    }
}else{
    $response1["tweet_succes"] = false;
}

echo json_encode($response1);  // finally return the complete array

它也可以更简单地完成,如果你只查询SELECT的这些字段,那么你就可以写

$response1 = array();
$response1["tweet_succes"] = false;
if($fetch_tweets->execute()){
    $response1["tweet_succes"] = true;
    $response1['results'] = $fetch_tweets->fetchAll(PDO::FETCH_ASSOC)){
}else{
    $response1["tweet_succes"] = false;
}

echo json_encode($response1);  // finally return the complete array