iOS解析JSON和AFN网络

iOS解析JSON和AFN网络,ios,json,parsing,afnetworking,Ios,Json,Parsing,Afnetworking,我正在使用以下网络工具使用web服务: NSURLRequest *request = [NSURLRequest requestWithURL:url]; AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON)

我正在使用以下网络工具使用web服务:

NSURLRequest *request = [NSURLRequest requestWithURL:url];

AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
    [self GotJSONSuccess:JSON :response ];
} failure: nil ];

[operation start];
web服务响应并提供以下json:

[
{
    "statusid": 1,
    "statusdesc": "ASSIGNED"
},
{
    "statusid": 2,
    "statusdesc": "COMPLETED"
},
{
    "statusid": 3,
    "statusdesc": "IN TRANSIT"
},
{
    "statusid": 4,
    "statusdesc": "DELAYED"
},
{
    "statusid": 5,
    "statusdesc": "ON HOLD"
}
]
我正在使用以下内容尝试解析json:

- (void)GotJSONSuccess: (NSString*) JSON : (NSHTTPURLResponse*) response
{

NSString *newString = [NSString stringWithFormat:@"%@",JSON];

NSLog(@"response: %@", JSON);
NSData* data = [newString dataUsingEncoding:NSUTF8StringEncoding];
NSError* error;
id jsonObjects = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];

if (error){
    NSLog(@"error is %@", [error localizedDescription]);
    return;
}

NSArray *keys = [jsonObjects allKeys];

for (NSString *key in keys){
    NSLog(@"%@ is %@",key, [jsonObjects objectForKey:key]);
}
}
但是,代码落入错误块,输出为 “操作无法完成。(Cocoa错误3840)。”

解析这个简单的json时我做错了什么

有没有比我现在采用的更好的解析方法


如果可能的话,我想继续使用本机iOS类和解析方法。

您可以使用NSJSONSerialization类来创建这样的数组

NSArray *arr = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:nil];
然后,对于每个状态ID,您只需索引到数组中,并按如下方式拉出字典:

NSDictionary *dict = [arr objectAtIndex:0];
最后一行将引出:`

{
    "statusid": 1,
    "statusdesc": "ASSIGNED"
}

然后您可以在字典上使用object for key之类的方法。`

您可以使用NSJSONSerialization类来创建这样的数组

NSArray *arr = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:nil];
然后,对于每个状态ID,您只需索引到数组中,并按如下方式拉出字典:

NSDictionary *dict = [arr objectAtIndex:0];
最后一行将引出:`

{
    "statusid": 1,
    "statusdesc": "ASSIGNED"
}

然后,您可以使用字典上的object for key之类的方法。`

如果您查看FoundationErrors.h(或者只是搜索您的项目,包括链接框架,查找3840,这就是我所做的),您将看到错误对应于NSPropertyStreadCorruptError。谷歌搜索这一点表明您的JSON可能无效。也许在JSON之前或之后有额外的空格字符?您可以发布URL或从服务器获得的完整响应吗


什么是kNilOptions?

如果您查看FoundationErrors.h(或者只是搜索您的项目,包括链接框架,查找3840,我就是这么做的),您将看到错误对应于NSPropertyListReadCorruptError。谷歌搜索这一点表明您的JSON可能无效。也许在JSON之前或之后有额外的空格字符?您可以发布URL或从服务器获得的完整响应吗

NSArray *array = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:nil];
NSArray *arrStatusid = [array valueForKey:@"statusid"];
什么是针织品

NSArray *array = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:nil];
NSArray *arrStatusid = [array valueForKey:@"statusid"];
使用新版(第二版)的AFNetworking试试这个:

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc]initWithRequest:req];
operation.responseSerializer = [AFJSONResponseSerializer serializer];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id response){

    //data is in response

} failure:^(AFHTTPRequestOperation *operation, NSError *err){

    //some code on failure
}];
[operation start];
使用新版(第二版)的AFNetworking试试这个:

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc]initWithRequest:req];
operation.responseSerializer = [AFJSONResponseSerializer serializer];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id response){

    //data is in response

} failure:^(AFHTTPRequestOperation *operation, NSError *err){

    //some code on failure
}];
[operation start];

如果您查看FoundationErrors.h(或者只是搜索您的项目,包括链接框架,查找3840,我就是这么做的),您将看到错误对应于NSPropertyStreadCorruptError。什么是针织品?杰西-知道如何绕过NSPropertyStreadCorruptError吗?这是否表明上面的JSON格式有问题?Siddharth-我最初的问题仍然是在调用NSJSONSerialization行时出错。上面的代码中是否有任何不正确的地方可能导致它无法序列化?如果您在FoundationErrors.h中查找(或者只是搜索您的项目,包括链接的框架,查找3840,这就是我所做的),您将看到错误对应于NSPropertyStreadCorruptError。什么是针织品?杰西-知道如何绕过NSPropertyStreadCorruptError吗?这是否表明上面的JSON格式有问题?Siddharth-我最初的问题仍然是在调用NSJSONSerialization行时出错。上面的代码中是否有任何不正确的地方可能导致它无法序列化?请转到以访问我的web服务。它从上面返回json。kNilOptions的计算结果仅为0。如果JSON末尾有一个额外的换行符。尝试删除它。转到以访问我的web服务。它从上面返回json。kNilOptions的计算结果仅为0。如果JSON末尾有一个额外的换行符。尝试删除它。