2011-08-05 18 views
0

PHPからJSONオブジェクト(文字列の配列で構成)を渡しています。私は、Java jArrayにオブジェクトを変換しようとしていますが、私は戻って私のPHPファイルから取得した文字列が正しく形成されていません:PHPからphp JSONオブジェクトからJSON配列を作成する際の問題

文字列を

[{"0":"2","id":"2","1":"2","household_id":"2","2":"3","stepgreen_id":"3","3":"tip 1","tip":"tip 1","4":"2011-08-05","dateOfTip":"2011-08-05","5":"3","likes":"3"}] 

[{"0":"2","id":"2","1":"2","household_id":"2","2":"3","stepgreen_id":"3","3":"tip 1","tip":"tip 1","4":"2011-08-05","dateOfTip":"2011-08-05","5":"3","likes":"3"},{"0":"91","id":"91","1":"1","household_id":"1","2":"1","stepgreen_id":"1","3":"tip 2","tip":"tip 2","4":"2011-08-04","dateOfTip":"2011-08-04","5":"1","likes":"1"}] 
(私は私のデシベルのヒントテーブル内の2つのエントリがあります)

はここに私のPHPコードのJavaで

<?php 
    // mysql connection, etc.... 
    $query = "SELECT * FROM Tips"; 
    $result = mysql_query($query); 
    while($row = mysql_fetch_array($result)) 
    { 
    $output[]=$row; 
    print(json_encode($output)); 
    } 
    mysql_close($con); 
    ?> 

ですが、私は次のようにします。何が起こるかは、jArrayを1つのエントリだけで返すことです。 PHPのjsonオブジェクトが1文字列の配列と2文字列の第2配列を返す理由はわかりません。私は2つの文字列の配列を受け取ることを期待しています。

 try { 
     InputStream responseData; 
     responseData = httpEntity.getContent(); 
     js = convertStreamToString(responseData); 
     Log.v(LOG_TAG, js); 
     jArray = new JSONArray(js); 

     JSONObject json_data = null; 

     Log.v(LOG_TAG, "Arraysize: " + jArray.length()); 
     for (int i = 0; i < jArray.length(); i++) { 
     Log.v(LOG_TAG, "entering loop"); 
     json_data = jArray.getJSONObject(i); 
     tip = json_data.getString("tip"); 
     stepgreenId = json_data.getString("stepgreen_id"); 
     dateOfTip = json_data.getString("dateOfTip"); 
     householdId = json_data.getString("household_id"); 
     likes = json_data.getString("likes"); 
     Log.v(LOG_TAG, "Json tip= " + tip + " stepgreen id: " + stepgreenId + " household_id: " + householdId + " likes: " + likes); 

    } 
} catch (IllegalStateException e1) { 
    // TODO Auto-generated catch block 
    e1.printStackTrace(); 
    } catch (IOException e1) { 
    // TODO Auto-generated catch block 
    e1.printStackTrace(); 
    }catch (JSONException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
+0

何です** JS **あなたがそれを実行すると? –

答えて

1

次ない場合:あなたはそれをデシリアライズしたい場合は

$first_array = array('first array'); 
$second_array = array('second array'); 

echo json_encode($first_array); 
echo json_encode($second_array); 

あなたが得るJSONが無効です。それらのために共通の配列を作成し、それを印刷する必要があります。あなたの場合:

<?php 
// mysql connection, etc.... 
$query = "SELECT * FROM Tips"; 
$result = mysql_query($query); 
$output = array(); 
while($row = mysql_fetch_array($result)) 
    $output[]=$row; 

print(json_encode($output)); 
mysql_close($con); 

これは動作するはずです。

+0

これは機能します!あなたのすべての返信をありがとう! – user836200

0

は、多くのJavaのか分からないのですが、PHP側であなたの代わりにmysql_fetch_assocまたはmysql_fetch_objectを使用してみてください。 mysql_fetch_arrayは、重複している数値キーと文字列キーを取得し、数値キーはjavaで問題を引き起こしている可能性があります。

0

これを行うための適切な方法は、それ内のオブジェクトの両方(またはそれ以上)でJSON文字列を返すことです。

$first_array = array(...); 
$second_array = array(...); 

die(json_encode(array(
    $first_array, 
    $second_array 
))); 

jQueryのgetJSON()関数を使用することもお勧めします。簡単に読み込み/操作できるJSオブジェクトを返します。

$.getJSON('yourFeedPage.php', 'id=xyz123', function(obj) { 
    for (int i = 0; i < obj.length(); i++) { 
     var item = obj[i]; 

     tip = item.tip; 
     stepgreenId = item.stepgreen_id; 
     dateOfTip = item.dateOfTip; 
     householdId = item.household_id; 
     likes = item.likes; 
    } 
); 
0

api.jquery.com/jQuery.getJSONクエリの結果セット内のすべての行のためのJSON文字列をダンプしているので、あなたは、あなたのprint_r()あなたwhile()ループ内に持っており、この文字列は増え続けより多くのレコードを追加すると、これは、5行を取得すると、5つのjsonストリングが取り出されることを意味します。

ほとんどのJavaはのみJSON文字列のFIRST(最初の/単一のレコード1)を取り、床に残りをダンプしています。

変更これと物事にあなたのコードは、作業を開始する必要があります。

while($row = mysql_fetch_array($result)) { 
    $output[] = $row; 
} 
print(json_encode($output)); 
+0

はい、これは助けとなりました。$ output = array(); whileループの前に。ありがとう! – user836200

関連する問題