如何通过URL将多个阵列导入iOS应用程序

时间:2013-08-02 07:28:47

标签: php ios json

我想知道是否有办法将多个数组从单个php文件返回到iOS应用程序。

我已经成功地使用了一个数组,但是当我添加另一个数组时,我似乎得到了null :(在这里使用相同的方法来保持简短,但实际上我从不同的表中得到结果)

PHP:

function getArray() 
{
    $query = "query here";

    if ($result = $this->db->query($query)) 
    {
        $resultArray = array();

        while($row = mysqli_fetch_assoc($result))
        {
          $resultArray[] = $row;
        }

        echo json_encode($resultArray);
        $result->free();
    }
}

getArray();
getArray();

当我在浏览器中打开我的php文件时,我看到类似这样的内容:

[{"id":"1","name":"John"},{"id":"2","name":"Susan"}]
[{"id":"1","name":"John"},{"id":"2","name":"Susan"}]

Xcode中:

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSURL *url = [NSURL URLWithString:@"urlhere"];
    NSData *data = [NSData dataWithContentsOfURL:url];
    NSArray *resultsArray = (NSArray *)[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
    NSLog(@"%@",resultsArray);
}

但是,resultsArray似乎正在返回(null)。如果我回显一次而不是两次它似乎工作。有没有办法让两个数组都进入Xcode,然后对它们使用NSJSONSerialization?谢谢!

1 个答案:

答案 0 :(得分:2)

您应该将小数组json_encode转换为JSON字符串,然后将它们放入另一个数组中。在您完成将所有小数组插入大数组后,您应该json_encode并将它们返回到您的xcode。

在你的xcode中,尝试使用github中的解析器框架/插件或其他人完成的google,并从你的php解析你的检索NSData。它现在应该成为NSArray / NSDictionary,取决于你解析数据的方式。


这是一些如何解析我的数组的示例,在某些情况下您可能需要解析它们两次。尝试NSLog结果并检查完成解析后得到的结果。

P.S。这会将NSData解析为NSDictionary,如果您需要它,请尝试修改自己以返回NSArray。

- (NSDictionary *)parseJsonDataToNSDictionary:(NSData *)POSTReply
{
NSDictionary * jsonArray = [[NSDictionary alloc] init];
// Check iOS version
NSString *version = [[UIDevice currentDevice] systemVersion];
BOOL isAtLeast5 = [version floatValue] >= 5.0;
if(isAtLeast5) {
    NSError *e = nil;
    jsonArray = [NSJSONSerialization JSONObjectWithData:POSTReply options:NSJSONReadingMutableContainers error:&e];
    if (!jsonArray) {
        NSLog(@"Error parsing JSON: %@", e); //return false;
    } else { /* sucess parsing */ }
} else {
    // support for device which not iOS 5
    NSString *json_string = [[NSString alloc] initWithData:POSTReply encoding:NSUTF8StringEncoding];
    SBJsonParser *parser = [[SBJsonParser alloc] init];
    jsonArray = [parser objectWithString:json_string];
}
return jsonArray;
}