1

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

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

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"}]

代码:

- (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?谢谢!

4

1 回答 1

2

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

在您的 xcode 中,尝试使用其他人githubgoogle其他人完成的解析器框架/插件,并解析您从 php.ini 中检索到的 NSData。它现在应该变成 NSArray/NSDictionary,这取决于你如何解析你的数据。


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

ps 这会将 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;
}
于 2013-08-02T07:52:01.630 回答