php json编码大型数组被截断

时间:2014-11-02 11:09:25

标签: php arrays json

我遇到了使用json_encode显示json的问题。问题是它在某一点之后被截断了。我猜大约2500行。我已经在stackoverflow中阅读了很多q& a,其他人建议增加内存限制。我已经把它增加到了32米 而且它仍然被截断了,我不认为这是问题,因为我已经回应了内存使用情况,并且我得到了3.5mb而且我得到了1.5mb我也尝试将其编码为1000但是直到某一点它仍然截断。

我的json看起来像这样

{ “ID”: “1”},{ “词”: “”},{ “位置”: “0”},{ “长度”: “0”},{ “Pdf_Id”: “1” }

仅2000多个

我的代码是这样的:

json文件

echo json_encode(array_values($db->getallqueryjsoncountStart("words_table","Allwords",4000,0)));


public function getallqueryjsoncountStart($table,$jsonparentname,$count,$start)
{

    $this->sqlquery = "select * from $table LIMIT $start,$count";
    $this->stmt = $this->conn->query($this->sqlquery);
    for ($i = 0; $i < $this->stmt->columnCount(); $i++) {
        $col = $this->stmt->getColumnMeta($i);
        $columns[] = $col['name'];
    }
    $this->initcnt = 0;
    $getqueryJson = array();

    while($this->row = $this->stmt->fetch()) 
    {
                for($x = 0;$x < sizeof($columns);$x++)
                {
                    $getqueryJson[][$columns[$x]] = $this->row[$columns[$x]];
                }
    }
    return $getqueryJson;
}

1 个答案:

答案 0 :(得分:3)

如果&#34;单词&#34;列实际上包含一些文本,可能会在值中包含一些非法字符。

将以下选项添加到json_encode函数:

JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP

有关每个内容的说明,请参阅manual page

另外。看起来你构造$getqueryJson数组的方式不正确。尝试更改如下

$getqueryJson = array();
while($this->row = $this->stmt->fetch()) 
{
    $row = array()
    for($x = 0;$x < count($columns);$x++)
    {
        $row[$columns[$x]] = $this->row[$columns[$x]];
    }
    $getqueryJson[] = $row;
}
return $getqueryJson; 

像这样调用方法。

$table_data = $db->getallqueryjsoncountStart("words_table","Allwords",4000,0);
echo json_encode($table_data, 
                 JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP);

这将生成一个具有以下格式的JSON字符串。

[{"Id":"1", "words":"", "Position":"0","Length":"0","Pdf_Id":"1"},
 {"Id":"2", "words":"", "Position":"0","Length":"0","Pdf_Id":"2"},
 {"Id":"3", "words":"", "Position":"0","Length":"0","Pdf_Id":"3"},
 ...
 {"Id":"4000", "words":"", "Position":"0","Length":"0","Pdf_Id":"4000"}]

如果问题仍然存在,请在致电json_encode后立即致电json_last_error()