我已经构建了一个连接到我的Sql DB的Web服务,并通过JSON返回所请求的数据量。
如果它返回一个记录,一切都很好,但是如果它返回多个,那么整个东西就会在for循环中死掉。任何人都可以指出我正确的方向,找出它为什么这样做。
NSString *urlString;
urlString = @"http://url.php";
NSData *jsonSource = [NSData dataWithContentsOfURL:
[NSURL URLWithString:urlString]];
id jsonObjects = [NSJSONSerialization JSONObjectWithData:
jsonSource options:NSJSONReadingMutableContainers error:nil];
for (NSDictionary *dataDict in jsonObjects) {
NSString *idData = [dataDict objectForKey:@"ID"];
dictionary = [NSDictionary dictionaryWithObjectsAndKeys:
idData, @"ID",
Nil];
[myObject addObject:dictionary];
我正在尝试将这些数据放入表视图中。
JSON是:
[
{
"ID": "8",
"APP_ID": "xx",
"NAME": "xxx",
"PRICING": "paid",
"PRODUCT_ID": "xxx",
"TITLE": "xxx",
"INFO": "xxx",
"DATE": "2014-01-01 00:00:00",
"AVAILABILITY": "published",
"COVER": "xxxx",
"URL": "xxxx",
"ITUNES_SUMMARY": "In this issue we interview Steve Jobs on all things Apple.",
"ITUNES_COVERART_URL": "xxx",
"ITUNES_PUBLISHED": "2012-11-01T00:00:00-07:00",
"ITUNES_UPDATED": "2012-11-01T00:00:00-07:00"
}
]
以下是生成JSON输出的PHP:
if($result = $con->query("SELECT * FROM ISSUES WHERE PRICING = 'free'")) {
$tempArray = array();
while($row = $result->fetch_object()) {
$tempArray = $row;
array_push($json, $tempArray);
echo json_encode($json);
}
}
答案 0 :(得分:2)
您确定响应是有效的JSON吗?将JSON数据转换为字符串并将其打印到控制台...
NSLog(@"%@", [[NSString alloc] initWithData:jsonSource encoding:NSUTF8StringEncoding]);
...然后在JSONLint或JSON Editor Online等JSON验证程序中进行检查。
您还可以在NSError
方法中将指针传递给NSJSONSerialization
对象。也可以将其记录到控制台。
NSError *error;
id jsonObjects = [NSJSONSerialization JSONObjectWithData:jsonSource
options:NSJSONReadingMutableContainers
error:&error];
NSLog(@"error %@", error);
如果没有任何错误消息,那么您应该检查的最后一件事是生成的jsonObjects
变量是您期望的类型(我假设您期望NSArray
)。
看到PHP代码后,这应该可以解决问题:
if($result = $con->query("SELECT * FROM ISSUES WHERE PRICING = 'free'")) {
$tempArray = array();
while($row = $result->fetch_object()) {
array_push($row, $tempArray);
}
echo json_encode($tempArray);
}
答案 1 :(得分:2)
您的服务器似乎只是连接JSON数组
[ { "ID":"1", ... } ] [ { "ID":"2", ... } ] ...
这是无效的JSON,NSJSONSerialization
将在阅读第一个后停止
JSON块,将其余部分视为垃圾。
服务器必须返回一个包含多个词典的数组:
[ { "ID":"1", ... }, { "ID":"2", ... }, ... ]