过多的JSON响应

时间:2013-04-09 16:17:52

标签: php mysql json

我的JSON响应中似乎有多余的键。知道为什么吗?

以下是JSON回复的摘录:

{
      "0": "1",
      "id": "1",
      "1": "XX University",
      "name": "XX University",
      "2": "http:\/\/ree.com\/images\/xxUniversity.png",
      "backgroundImageUrl": "http:\/\/ree.com\/images\/XXUniversityLogo.png",
      "3": "http:\/\/ree.com\/images\/xxUniversity.png",
      "logoImageUrl": "http:\/\/ree.com\/images\/XXUniversityLogo.png"
    },

这是我的PHP代码:

$query = "SELECT * from $entity"; //Bad security,for a different question
    $results = mysqli_query($con,$query);

    //Parse to JSON
    $json=array();

    while($row=mysqli_fetch_array($results)){
        $json[]=$row;
    }

    //Close connection
    mysqli_close($con);

    //Encode and send response as JSON (using the entity type as a parameter)
    //echo json_encode(array($entity => $json), JSON_FORCE_OBJECT);

    echo json_encode(array ($entity =>$json)); 

2 个答案:

答案 0 :(得分:4)

您的问题是mysqli_fetch_array。您希望将MYSQLI_ASSOC作为第二个参数传递。

while($row=mysqli_fetch_array($results,MYSQLI_ASSOC)){
    $json[]=$row;
}

From the docs:

  

此可选参数是一个常量,指示应从当前行数据生成哪种类型的数组。此参数的可能值为常量 MYSQLI_ASSOC MYSQLI_NUM MYSQLI_BOTH

     

通过使用 MYSQLI_ASSOC 常量,此函数的行为与mysqli_fetch_assoc()相同,而 MYSQLI_NUM 的行为与mysqli_fetch_row()函数相同。最后一个选项 MYSQLI_BOTH 将创建一个包含两者属性的数组。

答案 1 :(得分:1)

默认情况下,

mysqli_fetch_array检索数字和命名索引。

您必须指定其他参数才能获得所需的参数。

  • MYSQLI_ASSOC检索指定的数组
  • MYSQLI_NUM仅检索索引为整数的整数
  • MYSQLI_BOTH检索两者:)