如何在java中读取这个json数组

时间:2013-11-13 17:02:09

标签: java php arrays json eclipse

我有一个由这个php生成的json数组:

$filtros=mysql_query("SELECT id_transporte FROM user_trans WHERE id_usuario =     '".$id_usuario ."'");
for($i=0; $i<=mysql_num_rows($filtros); $i++){  
$rs[]= mysql_fetch_array($filtros,MYSQL_ASSOC);
}
foreach($rs as $valor){
    if (is_array($valor)) {
        foreach($valor as $valor1){
            $reportes[]= mysql_query("
                SELECT * FROM transportes 
                WHERE id_transporte='".$valor1."'
                ORDER BY fecha_reporte DESC ");
                }
    }       
}
foreach($reportes as $valor){
    if($valor != false){
        for($i=0; $i<=mysql_num_rows($valor); $i++){
        $row[]= mysql_fetch_array($valor,MYSQL_ASSOC);
        }                           
    }       
}
print_r (json_encode($row));

返回:

[{"id_report":"73","id_transport":"624","txt_report":"Report0"},

{"id_report":"46","id_transport":"624","txt_report":"Report1"},false,

{"id_report":"74","id_transport":"9999","txt_report":"Report2"},

{"id_report":"52","id_transport":"9999","txt_report":"Report3"},false]
好吧,我试着读一下,但java只读到“假”...... 这个数组是2个连接和打印的数组,所以我试试这个:

$row1=str_replace ( "false" , '{"salto":1}' , $row );
    $row1[]=false;
    print_r (json_encode($row1));

返回相同内容,但最后返回“”而不是“false”和“false” 但java继续阅读,直到现在“” 我用它来读json

if (jdata!=null && jdata.length() > 0){

JSONObject json_data = null;

try{                        

System.out.println( jdata.length() );//java there print all the array length ignoring the "false" o ""

for (int i=0; i < jdata.length(); i++){ 

reportsId[i]=jdata.getJSONObject(i).getString("id_report");
transportId[i]=jdata.getJSONObject(i).getString("id_transport");
txt_report[i]=jdata.getJSONObject(i).getString("txt_report");
System.out.println( " i= "+ i); 

}
}
}catch(Exception e3){}

所以我的问题是如何读取这个,或改变php上的一些行

2 个答案:

答案 0 :(得分:1)

首先,在PHP中,您不应该使用mysql_*函数,因为它们已被弃用并且很危险。您的代码可能容易受到SQL注入攻击。考虑使用PDO

你可以通过运行一个也可以摆脱假值的单一查询来加快速度。您当然不需要将所有内容都填充到数组中然后循环它。

这是我的看法:

$resp = mysql_query("SELECT t.* FROM transportes t 
    JOIN user_trans ut ON t.id_transporte=ut.id_transporte 
    WHERE ut.id_usuario='$id_usuario' 
    ORDER BY fecha_reporte DESC");

if(!$resp) {
    // handle the error!
    die(mysql_error())
}

$output = [];
while( $row = mysql_fetch_assoc($resp) ) {
    $output[] = $row;
}

print_r(json_encode($output));

这可以解决您的错误值问题,因为它们可能是由于第二个查询没有检查错误。

答案 1 :(得分:0)

JSON没有很好地形成。

"id_report":"46"

后有逗号丢失