我有一个由这个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上的一些行
答案 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"