【问题标题】:Can't encode Array from the output I got from a PHP script to Json无法从我从 PHP 脚本到 Json 的输出中编码数组
【发布时间】:2017-05-26 14:16:50
【问题描述】:

我有一个名为“plan_test”的 MySQL 数据库,其中包含名为 (5a, 5b, 5c...) 的表。这些表具有相同的列和多行。我已经设置了一个有权对数据库执行所有操作的用户。这是我的 php 代码,它应该返回一个 json 格式的字符串,我可以稍后阅读:

<?php
$servername = "localhost";
$username = "tester";
$password = "abc123";
$dbname = "plan_test";

$sql = "select * from plan_test.5a";

$con = mysqli_connect($servername,$username,$password,$dbname);
mysqli_set_charset($con,"utf-8");
$result = mysqli_query($con,$sql);

$response = array();

while($row = mysqli_fetch_array($result)){

    array_push($response,array("Klasse"=>$row[0],"Tag"=>$row[4],"Monat"=>$row[5],"Stundenanfang"=>$row[7],"Stundenende"=>$row[8],"Art"=>$row[9],"Fach"=>$row[10],"Lehrer"=>$row[11],"sFach"=>$row[12],"sLehrer"=>$row[13],"Raum"=>$row[14],"Bemerkung"=>$row[15]));

}
echo json_encode(array("test"=>$response));

mysqli_close($con);

?>

当我运行时,我得到了一个空白站点

var_dump($response);

我明白了:

array(3) {
  [0]=>
  array(12) {
    ["Klasse"]=>
    string(2) "5a"
    ["Tag"]=>
    string(2) "19"
    ["Monat"]=>
    string(1) "5"
    ["Stundenanfang"]=>
    string(1) "1"
    ["Stundenende"]=>
    string(1) "2"
    ["Art"]=>
    string(10) "Vertretung"
    ["Fach"]=>
    string(1) "E"
    ["Lehrer"]=>
    string(2) "VH"
    ["sFach"]=>
    string(1) "E"
    ["sLehrer"]=>
    string(2) "AL"
    ["Raum"]=>
    string(3) "113"
    ["Bemerkung"]=>
    string(1) "�"
  }
  [1]=>
  array(12) {
    ["Klasse"]=>
    string(2) "5a"
    ["Tag"]=>
    string(2) "19"
    ["Monat"]=>
    string(1) "5"
    ["Stundenanfang"]=>
    string(1) "3"
    ["Stundenende"]=>
    string(1) "4"
    ["Art"]=>
    string(10) "Vertretung"
    ["Fach"]=>
    string(4) "SCHW"
    ["Lehrer"]=>
    string(2) "WE"
    ["sFach"]=>
    string(4) "SCHW"
    ["sLehrer"]=>
    string(2) "TO"
    ["Raum"]=>
    string(3) "AH2"
    ["Bemerkung"]=>
    string(1) "�"
  }
  [2]=>
  array(12) {
    ["Klasse"]=>
    string(2) "5a"
    ["Tag"]=>
    string(2) "19"
    ["Monat"]=>
    string(1) "5"
    ["Stundenanfang"]=>
    string(1) "3"
    ["Stundenende"]=>
    string(1) "4"
    ["Art"]=>
    string(10) "Vertretung"
    ["Fach"]=>
    string(4) "SCHW"
    ["Lehrer"]=>
    string(2) "RR"
    ["sFach"]=>
    string(4) "SCHW"
    ["sLehrer"]=>
    string(2) "WI"
    ["Raum"]=>
    string(3) "AH1"
    ["Bemerkung"]=>
    string(1) "�"
  }
}

由于某种原因,该数组未编码为 json 格式。 如何将此数组编码为 json 字符串?

顺便说一句,来自“Bemerkung”的未定义字符串应该在那里。

【问题讨论】:

  • 回声 $json = json_encode($response); ?
  • var_dump()在哪里?
  • @Blueline nope..
  • @MrKen 在编码之前和编码之后都试过了。没有任何改变。
  • 尝试在末尾添加echo json_last_error_msg();。您的 var_dump 输出中有一些损坏的字符,它们可能是无效的 UTF-8。

标签: php mysql arrays json


【解决方案1】:

这是一个格式错误的 UTF-8 字符.. 谢谢@Vatev

【讨论】:

    【解决方案2】:

    你使用的是mysqli_fetch_array函数,你可以从他的名字猜到这个函数会返回一个PHP数组;)

    您需要将您的 PHP 数组转换为 json 字符串,即 json_encode 函数将为您完成工作。

    从您的 php 中,您需要添加标头 content-type: application/json 以在返回给客户端的响应中指定正文在 json 中。这样,客户端浏览器将能够正确读取数据。

    第三行 Bemerkung 列在数据库中的值是多少。我认为这是口音之类的,您可能有编码问题

    【讨论】:

      【解决方案3】:

      我认为,你必须像这样使用 mysqli_fetch_all()。

      $servername = "localhost";
      $username = "tester";
      $password = "abc123";
      $dbname = "plan_test";
      
      $sql = "select * from plan_test.5a";
      
      $con = mysqli_connect($servername,$username,$password,$dbname);
      mysqli_set_charset($con,"utf-8");
      $result = mysqli_query($con,$sql);
      
      $response = mysqli_fetch_all();
      
      echo json_encode($response);
      
      mysqli_close($con);
      

      我无法测试脚本,但它必须解决您的问题。

      【讨论】:

        【解决方案4】:

        您从未将$response 设置为编码版本,您将echo 设置为$response 的编码版本。这就是var_dump() 显示数组的原因。

        要输出实际的 JSON,您必须添加适当的 Content-Type 标头:

        header('Content-Type: application/json');
        echo json_encode(array("test"=>$response));
        

        【讨论】:

          猜你喜欢
          • 2012-02-01
          • 2015-03-03
          • 2011-11-24
          • 1970-01-01
          • 1970-01-01
          • 2019-10-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多