2014-11-02 71 views
2

我遇到了顯示帶有json_encode的json的問題。問題是在某個點之後會被截斷。我猜測2500線左右。我已經閱讀了大量的計算器,其他人建議增加內存限制。我已經增加了它已經到32m ,它仍然被截斷此外,我不認爲這是我回應了內存使用情況的問題,並與真正我得到3.5mb和假我得到1.5mb我也嘗試編碼它到1000,但直到某個點它仍然截斷。php json encode large arrays gets truncated

的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

也許值得改變SQL查詢中記錄的順序,以確保json_encode在2500行後仍然中斷,而不是因爲要編碼的數據有問題。 – 2014-11-02 13:19:10

+0

'json_last_error()'的輸出是什麼? http://php.net/manual/en/function.json-last-error.php – robbmj 2014-11-02 13:22:10

+0

改變了順序仍然約2500線斷裂。 json_last_error()返回0.謝謝你的回覆 – 2014-11-02 13:57:58

回答

3

如果 「言」 colu mn實際上包含一些文本,其中可能包含某些非法字符。

將以下選項添加到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()

+0

Dude這真棒!我不知道非法字符可能會使json字符串截斷。兩者都可以工作,而且即使超過10,000條記錄,我也沒有問題。案件關閉。非常感謝你 – 2014-11-02 14:03:45

+0

@Andremalupet,不客氣。 – robbmj 2014-11-02 14:04:50