2015-12-02 113 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

相关问题