Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php JSON作为引号接收(带“标记”)_Php_Json - Fatal编程技术网

Php JSON作为引号接收(带“标记”)

Php JSON作为引号接收(带“标记”),php,json,Php,Json,我一直从我的web服务接收带引号的JSON,如下所示: "[{"id":"1","nombre":"Cecilia","correo":"csoto@ts.edu.mx","telefono":"5529964"},{"id":"2","nombre":"Romero","correo":"","telefono":"5435432"},{"id":"3","nombre":"nick","correo":"carlos@mail.com","telefono":"12345"}]" 注意括号

我一直从我的web服务接收带引号的JSON,如下所示:

"[{"id":"1","nombre":"Cecilia","correo":"csoto@ts.edu.mx","telefono":"5529964"},{"id":"2","nombre":"Romero","correo":"","telefono":"5435432"},{"id":"3","nombre":"nick","correo":"carlos@mail.com","telefono":"12345"}]"
注意括号前的“”,我不知道为什么。 我将jacwright的restServer()用于以下函数:

public function getUsers()
{
    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "estudiantes";

    // Create connection
    $array = array();

    $conn = new mysqli($servername, $username, $password, $dbname);
    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }

    $sql = "SELECT id, nombre, correo, telefono FROM estudiante";
    $result = $conn->query($sql);

    if ($result->num_rows > 0) {
        // output data of each row
        while($row = $result->fetch_assoc()) {

            $res = array("id" => $row["id"], "nombre" => $row["nombre"], "telefono" => $row["telefono"], "correo" => $row["correo"]);
            array_push($array, $res);
            //echo "id: " . $row["id"]. " - Name: " . $row["nombre"]. " " . $row["correo"]. "<br>";
        }
    }

    $conn->close();

    return json_encode($array)  ;
}
公共函数getUsers() { $servername=“localhost”; $username=“root”; $password=“”; $dbname=“estudiantes”; //创建连接 $array=array(); $conn=newmysqli($servername、$username、$password、$dbname); //检查连接 如果($conn->connect\u错误){ die(“连接失败:”.$conn->connect\U错误); } $sql=“从estudiante选择id、nombre、correo、telefono”; $result=$conn->query($sql); 如果($result->num_rows>0){ //每行的输出数据 而($row=$result->fetch_assoc()){ $res=array(“id”=>$row[“id”],“nombre”=>$row[“nombre”],“telefono”=>$row[“telefono”],“correo”=>$row[“correo”]); 阵列推送($array,$res); //echo“id:.$row[“id”]。-名称:.$row[“nombre”]。.$row[“correo”]。
; } } $conn->close(); 返回json_encode($array); }
有人能告诉我为什么它一直在添加这些引号吗?

这只是一个模拟您案例的快速示例,使用echo返回JSON编码的数组:

JS:

$.get('json.php', function(data) {
  console.log(data);
  if (data) {
    //Check the console, everything is working like charm
    newData = $.parseJSON(data);
    console.log(data);
    console.log('--------------' + 'Elements count:' + newData.length);
    console.log('--------------' + newData);
  }
});
<?php
    $myArr = array(
        array("id"=>"1","nombre"=>"Cecilia","correo"=>"csoto@ts.edu.mx","telefono"=>"5529964"),
        array("id"=>"2","nombre"=>"Romero","correo"=>"","telefono"=>"5435432"),
        array("id"=>"3","nombre"=>"nick","correo"=>"carlos@mail.com","telefono"=>"12345")
    );
    $jsonData = json_encode($myArr);
    echo $jsonData;
?>
json.php:

$.get('json.php', function(data) {
  console.log(data);
  if (data) {
    //Check the console, everything is working like charm
    newData = $.parseJSON(data);
    console.log(data);
    console.log('--------------' + 'Elements count:' + newData.length);
    console.log('--------------' + newData);
  }
});
<?php
    $myArr = array(
        array("id"=>"1","nombre"=>"Cecilia","correo"=>"csoto@ts.edu.mx","telefono"=>"5529964"),
        array("id"=>"2","nombre"=>"Romero","correo"=>"","telefono"=>"5435432"),
        array("id"=>"3","nombre"=>"nick","correo"=>"carlos@mail.com","telefono"=>"12345")
    );
    $jsonData = json_encode($myArr);
    echo $jsonData;
?>


以上代码使用
返回$jsonData
而不是
echo$jsonData
在json.php中,它在控制台中为我提供了以下内容:

  • 数据为空
  • 控制台错误:
ReferenceError:未定义新数据


获取返回字符串中的引号的原因是服务器()本身正在进行json_编码。因此,当您从函数
getUsers
返回数据并且使用了
json\u encode
时,它将转换为json字符串,当RestServer将其返回给您时,它只将其视为字符串,因此在其周围添加引号

如果查看
TestController
,您将看到它返回一个对象
$user
而不是
json\u encode($user)
,并且RestServer在它的
sendData
函数中实际使用了
json\u encode
函数

因此,您的代码需要:

public function getUsers()
{
    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "estudiantes";

    // Create connection
    $array = array();

    $conn = new mysqli($servername, $username, $password, $dbname);
    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }

    $sql = "SELECT id, nombre, correo, telefono FROM estudiante";
    $result = $conn->query($sql);

    if ($result->num_rows > 0) {
        // output data of each row
        while($row = $result->fetch_assoc()) {

            $res = array("id" => $row["id"], "nombre" => $row["nombre"], "telefono" => $row["telefono"], "correo" => $row["correo"]);
            array_push($array, $res);
            //echo "id: " . $row["id"]. " - Name: " . $row["nombre"]. " " . $row["correo"]. "<br>";
        }
    }

    $conn->close();

    return $array;
}
公共函数getUsers() { $servername=“localhost”; $username=“root”; $password=“”; $dbname=“estudiantes”; //创建连接 $array=array(); $conn=newmysqli($servername、$username、$password、$dbname); //检查连接 如果($conn->connect\u错误){ die(“连接失败:”.$conn->connect\U错误); } $sql=“从estudiante选择id、nombre、correo、telefono”; $result=$conn->query($sql); 如果($result->num_rows>0){ //每行的输出数据 而($row=$result->fetch_assoc()){ $res=array(“id”=>$row[“id”],“nombre”=>$row[“nombre”],“telefono”=>$row[“telefono”],“correo”=>$row[“correo”]); 阵列推送($array,$res); //echo“id:.$row[“id”]。-名称:.$row[“nombre”]。.$row[“correo”]。
; } } $conn->close(); 返回$array; }
还可以查看第414行中的函数
sendData

因为JSON是一个字符串,所以需要对其进行解析。
JSON.parse()
正是@aldrin27上面所说的^。它是一个字符串,所以如果您使用jquery,只需解析它-尝试一个简单的
json\u encode([])
,看看是否会产生类似的结果。在我的php文件中解析它?还是我的客户?我在我的客户机上解析它,我认为这是我的客户机应用程序的一个问题,但我问了,用户告诉我这是php,而不是客户机代码。谢谢,我不是javaScript专家,我不知道为什么会出现ReferenceError,我想我的问题是在我实现上面复制的github项目时,据我所知,我需要返回JSON,以便restServer可以使用并显示它。使用echo在我的自定义方法中不起作用,因为它不会显示在请求中。发生错误的原因是,当我在php中使用
return
时,数据是空的,所以javascript抱怨,很抱歉,我不知道REST的内容,但通常人们使用
echo
,祝您一切顺利,希望您能尽快找到答案谢谢您的回答,我会继续查找。这是我最初的方法,使用
return$array
,但当我在客户端应用程序上调用此服务时,它会将其读取为字符串而不是对象。您应该在客户端应用程序中将其与JSON.parse()一起使用。所以
var object=JSON.parse(returnedDataFromServer)
显然很直截了当地猜测您正在使用JavaScript:我希望我使用的是JavaScript,我正在开发一个android应用程序,并使用
JsonReader
阅读
InputStreamReader
,但没有运气:(但感谢您的评论,这是应用程序的JAVA部分的问题,而不是php响应的问题。php部分应该由我的回答来修复。尽管如此,我还是要向您指出:
JSONObject jsonRootObject=new JSONObject(strJson)
把它读成
JsonObject
,再看看这个:还有这个问题:还建议为Android问题提出一个新问题,这样我们就可以把问题分开了。