使用php从sql数据库创建json对象

时间:2015-08-21 09:37:52

标签: php android mysql json

我正在尝试从我的mysql数据库中为一个android项目创建一个json对象。我需要一个像这样的输出:

{
    "feed": [
        {
            "id": 1,
            "name": "National Geographic Channel",
            "image": "http://api.androidhive.info/feed/img/cosmos.jpg",
            "status": "\"Science is a beautiful and emotional human endeavor,\" says Brannon Braga, executive producer and director. \"And Cosmos is all about making science an experience.\"",
            "profilePic": "http://api.androidhive.info/feed/img/nat.jpg",
            "timeStamp": "1403375851930",
            "url": null
        },
        {
            "id": 2,
            "name": "TIME",
            "image": "http://api.androidhive.info/feed/img/time_best.jpg",
            "status": "30 years of Cirque du Soleil's best photos",
            "profilePic": "http://api.androidhive.info/feed/img/time.png",
            "timeStamp": "1403375851930",
            "url": "http://ti.me/1qW8MLB"
        }
]
}

但我得到这样的东西:

{"feed":[{"id":"0","name":"punith","image":"","status":"ucfyfcyfffffffffffffffffffffffffffffffff","profilePic":"http:\/\/api.androidhive.info\/feed\/img\/nat.jpg","timestamp":"1403375851930","url":""}]}

一切都在一行上,id属性不应该是引号。有什么我能做的。这是我的php文件

<?php
define('HOST','');
define('USER','');
define('PASS','');
define('DB','');

$con = mysqli_connect(HOST,USER,PASS,DB);

$sql = "select * from timeline";

$res = mysqli_query($con,$sql);

$result = array();

while($row = mysqli_fetch_array($res)){
array_push($result,
array('id'=>$row[0],
'name'=>$row[1],
'image'=>$row[2],
'status'=>$row[3],
'profilePic'=>$row[4],
'timestamp'=>$row[5],
'url'=>$row[6]
));
}

echo json_encode(array("feed"=>$result));

mysqli_close($con);

?>

如果输出在一行上,它会影响吗? 数据库包含与属性完全相同的列。

提前致谢

4 个答案:

答案 0 :(得分:1)

尝试使用 JSON_PRETTY_PRINT

进行编码
$json_string = json_encode($data, JSON_PRETTY_PRINT);

其中data是您的结果数组。

在你的情况下

echo json_encode(array("feed"=>$result),JSON_PRETTY_PRINT);

从官方PHP文档中引用此Tutorial

答案 1 :(得分:0)

引号中的ID

ID在引号中,因为它是一个字符串,而不是整数。你可以通过改变它来改变它:

array('id'=>$row[0]

到此:

array('id'=>intval($row[0])

“漂亮的印刷”

将它放在多行上只会影响可读性,但不会影响数据的计算方式 - 但你可以对它进行美化:Pretty-Printing JSON with PHP

$output = json_encode(array("feed"=>$result), JSON_PRETTY_PRINT);
echo $output;

答案 2 :(得分:0)

除了其他答案之外,包含json标题会更具语义性,我发现只包含这个也有助于json本身的外观,以便它被正确格式化而不是所有一个连续字符串。

header('Content-Type: application/json');

答案 3 :(得分:0)

对于php&gt; 5.4

$json=json_encode(array("feed"=>$result),JSON_PRETTY_PRINT);
header('Content-Type: application/json');
print_r($json);