使用PHP的mysql数据库的JSON响应显示格式不正确

时间:2015-08-17 16:51:53

标签: php mysql json

function getForum($class_divisionId) {
    $qry = "SELECT fm.uid,fm.class_divisionId,fm.username,fm.description,fm.date_time,si.name FROM forum as fm INNER JOIN studentinfo as si ON fm.username = si.username WHERE fm.class_divisionId='".mysql_real_escape_string($class_divisionId)."'";

    $exe = mysql_query($qry);

    if (mysql_num_rows($exe)> 0) {
        $response['error'] = 'false';
        while($result = mysql_fetch_array($exe)){
            $uid = $result['uid'];
            $response['forum'][$uid]['uid'] = $result['uid'];
            $response['forum'][$uid]['class_divisionId'] = $result['class_divisionId'];
            $response['forum'][$uid]['username'] = $result['username'];
            $response['forum'][$uid]['description'] = $result['description'];
            $response['forum'][$uid]['date_time'] = $result['date_time'];
            $response['forum'][$uid]['name'] = $result['name'];  
        }
        return $response;
    } else {
        return false;
    }
}

这是我的php文件中的getforum函数。我得到的回应是:

{
    "error": "false",
    "forum": {
        "4": {
            "uid": "4",
            "class_divisionId": "ABC",
            "username": "XYZ_1",
            "description": "Forum description number 2",
            "date_time": "2015-08-15 10:17:18",
            "name": "XYZ"
        }
   }
}

我希望回复采用以下格式:

{
    "error": "false",
    "forum": [
        {
            "uid": "4",
            "class_divisionId": "ABC",
            "username": "XYZ_1",
            "description": "Forum description number 2",
            "date_time": "2015-08-15 10:17:18",
            "name": "XYZ"
        }
    ]
}

有人可以告诉我我做错了吗?

3 个答案:

答案 0 :(得分:0)

使用

$response['forum'][$uid]->'uid' = $result['uid'];
$response['forum'][$uid]->'class_divisionId' = $result['class_divisionId'];

这使得论坛值具有由uid值表示的数组,您可以为其设置每个条目的数据。

答案 1 :(得分:0)

这是不可能的。 Javascript数组必须具有顺序键数字,因为[...]语法不允许您指定键。由于您使用的是ID号,几乎可以肯定不是顺序的或没有间隙的,因此必须将“数组”编码为对象。

e.g。

$foo = array(0 => 'a', 3 => 'b'); // missing keys 1 & 2
echo json_encode($foo);           // {"0":"a","3":"b"}
$bar = array('a', 'b');            // implicit keys 0,1
echo json_encode($bar);           // ["a","b"]
$baz = array(0 => 'a', 1 => 'b')  // explicit keys 0,1
echo json_encode($baz);           // ["a","b"]

至于原因:由于数组[] - 快捷符号不能指定键,json编码引擎将被强制直接指定EVERY SINGLE缺失键,因此请考虑退化情况:

$foo = array(0 => 'a', 999999999 => 'b');

JSON绝对是MASSIVE,有999,999,998份x:null,只是为了“填空”。

答案 2 :(得分:0)

这是因为您没有添加为数组元素,而是将其添加为带键的assoc-array元素,

这将有您发布的输出

Could not read a WAV header from a stream of 0 bytes