Php JSON作为引号接收(带“标记”)
我一直从我的web服务接收带引号的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"}]" 注意括号
"[{"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中,它在控制台中为我提供了以下内容:
数据为空
- 控制台错误:
获取返回字符串中的引号的原因是服务器()本身正在进行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问题提出一个新问题,这样我们就可以把问题分开了。