2015-12-02 57 views
2

下面的鏈接中提供的JSON有什麼問題???爲什麼我的PHP腳本不能返回有效的JSON

http://bruceexpress.com/beerstore/test/getottawaeaststorebeerlist.php

使用PHP,我生成上述JSON從SQL查詢和與json_encode編碼它。

$retval = mysqli_query($connection, $sql); 
if(! $retval) 
{ 
    print('Could not select: ' . mysqli_error()); 
} 
$storearray = array(); 
while($row = mysqli_fetch_assoc($retval)) 
{ 
    $storearray[] = $row; 
} 
header('Content-Type: application/json'); 
echo json_encode($storearray); 

在SWIFT:

json = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) 

被扔NSCocoaErrorDomain代碼= 3840例外。 「JSON文字不與陣列開始......」

我捕捉到的異常和打印的數據,而我看到的是:

("<!DOCTYPE html>\n[{\"beer_id\":\"1650\",\"store_id\":\"4618\"},{\"beer_id\":\"1650\",\"store_id\":\"4607\"},{\"beer_id\":\"1650\",\"store_id\":\"4616\"},{\"beer_id\":\"1650\",\"store_id\":\"4604\"},{\"beer_id\":\"5213\", 

..........( 「)

我知道有很多這樣的問題,但我仍然沒有看到我需要的答案。什麼是錯的我的JSON ???

+3

在json中不應該有文檔類型;你有沒有正確設置標題(像這樣:http://stackoverflow.com/questions/4064444/returning-json-from-a-php-script)? – chrisjlee

+0

你的PHP腳本還有什麼迴音/打印/輸出? –

+1

你正在打印'<!DOCTYPE html>'在你迴應你的'JSON'之前將頁面打印出來 – cmorrissey

回答

0

首先用UTF-8編碼你的php文件,不包含BOM,並刪除所有空白<?php標籤 其次,如果您想發送標題,則不要打印任何內容; 第三,你真的需要一些檢查,並返回你的腳本,因爲我看到現在至少有2個錯誤,這將在未來出現

+0

沒有BOM的UTF-8在這種情況下不適用。正如我上面所承認的那樣,它是一個「<!DOCTYPE html>」,位於腳本的頂部,我從另一個文件中複製並粘貼。我的愚蠢!至於錯誤,是的,我會在稍後處理,但是我正在爲我自己的需要生成一個數據庫。因此,我完全控制它的結構,並可以對我的代碼稍微寬鬆些。這是一個每週庫存檢查的準備工作,它可以與安大略省所有啤酒店的所有啤酒相匹配,並將這些數據推送到我的數據庫中。但是,首先我必須掃描html並提取數據。 – bhardy

+0

嘗試json_encode($ storearray,JSON_FORCE_OBJECT) –

+0

它確定,謝爾蓋。只有Doctype是問題。現在一切都很好,我已經成功生成了我需要的所有商店/啤酒對。希望有一個更快的方法來做到這一點,但現在我必須打開,然後掃描每個商店/啤酒對的HTML。例如:http://www.thebeerstore.ca/beers/inventory/1650/4618 – bhardy

相關問題