PHP/IOS:为web服务编码json的最佳方式是什么?

PHP/IOS:为web服务编码json的最佳方式是什么?,php,ios,mysql,json,Php,Ios,Mysql,Json,我试图创建一个web服务,通过php从mysql数据库提供json,并在iPhone应用程序中显示 我有一个标准的mysql/php设置 数据位于包含字段和记录的表中。使用sql查询以创建记录集。记录集中的每条记录都是一行 php $sql = "SELECT userid,task,longtask FROM tasks WHERE userid = 1 LIMIT 1"; $res = mysql_query($sql) or die(mysql_error()); $tasks =

我试图创建一个web服务,通过php从mysql数据库提供json,并在iPhone应用程序中显示

我有一个标准的mysql/php设置

数据位于包含字段和记录的表中。使用sql查询以创建记录集。记录集中的每条记录都是一行

php

$sql = "SELECT userid,task,longtask FROM tasks WHERE userid = 1 LIMIT 1";
$res = mysql_query($sql) or die(mysql_error());  
$tasks = array();
while($row = mysql_fetch_assoc($res)) {
$tasks[] = array('row'=>$row);
 } 
echo json_encode(array('tasks'=>$tasks));
//
web服务生成以下输出:

{"tasks":[{"row":{"userid":"1","task":"send email to Bob","longtask":"include attached memo"}}]}
然而,我在将其读入IOS时遇到了很多麻烦,这意味着可能有更好的web服务格式

该结构与我在教程和其他源代码中找到的将json读入IOS(没有一个使用php/mysql)的结构不同

有谁能告诉我一种更好的方法来构造json,或者在iOS中读取json的代码来获取用户ID、任务和其他变量

当我尝试此操作时,我得到一个错误,它无法在索引0处创建行

      NSError* error;
    NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseData //1
                                                         options:kNilOptions 
                                                           error:&error];
    NSLog(@"about to print json: %@",json);
NSMutableArray *getElement = [json objectForKey:@"tasks"];
    for (NSDictionary *dict in getElement) {
        NSArray *array = [dict objectForKey:@"row"];
        NSString *str = [array objectAtIndex:0];
    }
提前感谢您的建议

方法1:编辑PHP代码 索引0不可用,因为您正在使用
mysql\u fetch\u assoc
从PHP获取关联数组

使用
mysql\u fetch\u array
将返回一个数组,默认情况下该数组包含基于零的索引和关联键

$sql = "SELECT userid,task,longtask FROM tasks WHERE userid = 1 LIMIT 1";
$res = mysql_query($sql) or die(mysql_error());  
$tasks = array();
while($row = mysql_fetch_array($res)) {
    $tasks[] = array('row'=>$row);
} 
echo json_encode(array('tasks'=>$tasks));
将输出

{"tasks":[{"row":{"0":"1","userid":"1","1":"send email to Bob","task":"send email to Bob","2":"include attached memo","longtask":"include attached memo"}}]}
现在,您可以使用键
0
userid
检索userid

方法2:编辑iOS代码 编辑iOS代码。但要使其工作,您必须知道行中的键

NSString *str = [array objectForKey:@"userid"];`

你试过框架吗?在我真正了解情况之前,尽量避免框架。我发现json格式,即什么是字典,什么是数组,以及您是否可以在服务器输出中控制它令人困惑。第一种更改为mysql_fetch_数组的方法看起来应该可以工作,但它仍然会产生相同的错误。您将在哪里编辑iOS代码?它代替NSString生成预期的表达式,并且NSArray没有可见的@interface声明选择器objectforkey错误。我猜,由于这两种类型的数组已经组合在一起,0也被视为键而不是索引。这使数组成为一个对象。试试mysql\u fetch\u数组($res,mysql\u NUM)这将只返回一个基于索引的数组。如果这样做了,我认为您可能不需要iOS编辑。