【问题标题】:Mashape Objective-C for iOS - MashapeResponse to JSON ObjectMashape Objective-C for iOS - 对 JSON 对象的 MashapeResponse
【发布时间】:2012-09-20 14:36:18
【问题描述】:

我正在通过 Mashape.com 使用一个名为 Lamda (https://www.mashape.com/lambda) 的人脸识别 API。

当我从识别请求中获得结果时,它会给我一个“MashapeRespose”对象。

我无法将此 MashapeResponse 或其任何部分转换为 JSON 对象。

当我打电话时

NSLog(@"des=%@", [response body]);

我把这个打印出来

{
    images =     (
        "http://api.lambdal.com/static/uploads/img05Xv8N.png"
    );
    photos =     (
                {
            height = 241;
            tags =             (
                                {
                    attributes =                     (
                                                {
                            confidence = "0.7097208087892503";
                            gender = male;
                        }
                    );
                    center =                     {
                        x = 95;
                        y = 98;
                    };
                    confidence = "0.978945010372561";
                    "eye_left" =                     {
                        x = 114;
                        y = 84;
                    };
                    "eye_right" =                     {
                        x = 76;
                        y = 85;
                    };
                    height = 112;
                    "mouth_center" =                     {
                        x = "96.5";
                        y = "134.5";
                    };
                    "mouth_left" =                     {
                        x = 74;
                        y = "134.5";
                    };
                    "mouth_right" =                     {
                        x = 119;
                        y = "134.5";
                    };
                    nose =                     {
                        x = 94;
                        y = 113;
                    };
                    tid = 31337;
                    uids =                     (
                                                {
                            confidence = "0.323";
                            prediction = manuel;
                            uid = "manuel@MICClientele";
                        },
                                                {
                            confidence = "0.194";
                            prediction = olivier;
                            uid = "olivier@MICClientele";
                        },
                                                {
                            confidence = "0.161";
                            prediction = sean;
                            uid = "sean@MICClientele";
                        },
                                                {
                            confidence = "0.161";
                            prediction = damien;
                            uid = "damien@MICClientele";
                        },
                                                {
                            confidence = "0.065";
                            prediction = egle;
                            uid = "egle@MICClientele";
                        },
                                                {
                            confidence = "0.065";
                            prediction = gareth;
                            uid = "gareth@MICClientele";
                        }
                    );
                    width = 112;
                }
            );
            url = "http://api.lambdal.com/static/uploads/img05Xv8N.png";
            width = 200;
        }
    );
    status = success;
} 

显然这不是有效的 JSON。

这是 MashapeResponse.h 的内容

#import "MashapeResponse.h"

@interface MashapeResponse ()
@property (readwrite, retain) NSData* rawBody;
@property (readwrite) NSDictionary* headers;
@property (readwrite) int code;
@end

@implementation MashapeResponse

@synthesize rawBody;
@synthesize headers;
@synthesize code;
@synthesize body;

-(MashapeResponse*)initWithResponse:(int)httpCode headers:(NSDictionary*) httpHeaders rawBody:(NSData*) httpRawBody {
    self = [super init];
    [self setCode:httpCode];
    [self setHeaders:httpHeaders];
    [self setRawBody:httpRawBody];
    return self;
}

@end 

有没有人能够在 iOS 上使用 Mashape 并能够转换成 JSON 对象?

我可以使用子字符串来获取我想要的信息,但这不是它应该如何工作,因为文档声明它应该是一个 json 响应..

至少可以说非常沮丧......

问候 达米安

PS。我已经通过邮件向 Mashape 支持发送了这个问题,所以如果我在有人在这里发布答案之前得到了解决方案,我会将其添加到这篇文章中。

编辑:

当我打电话时

id status = [response valueForKey:@"status"];
NSLog(@"status=%@", [status description]);
id photos = [response valueForKey:@"photos"];
NSLog(@"photos=%@", [photos description]);

我得到了这个异常

2012-09-20 16:53:20.609 Clientele[5160:707] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<MashapeJsonObjectResponse 0x3d2810> valueForUndefinedKey:]: this class is not key value coding-compliant for the key status.'

【问题讨论】:

    标签: ios objective-c lambda mashape


    【解决方案1】:

    首先感谢 Dcritelli 对这个问题的帮助..

    我收到了 Mashape 对我的问题的回复,他们向我发送了这封电子邮件作为回复。


    你好,达米安,

    [response body] 方法已经返回一个解析的 JSON 对象。如果 您需要以字节为单位的原始响应(即 NSData* 对象),您可以 通过调用 [response rawBody] 来获取它。您可以将 NSData* 转换为 NSString* 如果你愿意。

    假设 [response body] 返回解析后的 JSON 对象,例如 获取“photos”数组中第一张照片的“url”属性, 你会写:

     NSArray* photos = [[response body] objectForKey:@"photos"];
     NSDictionary* firstPhoto = [photos objectAtIndex:0];
     NSString* url = [firstPhoto objectForKey:@"url"];
     NSLog(@"URL of the first photo is: %@", url);
    

    如果文档令人困惑,我们深表歉意,我们已对其进行了更新,您可以 在此处阅读新修订版: https://www.mashape.com/docs/consume/objectivec

    如果您需要其他帮助,请告诉我们,干杯


    因此,他们不仅回复了解决方案,还更新了文档。

    向 Mashape 致敬。

    问候 达米安

    【讨论】:

      【解决方案2】:

      我相信它是一个字典对象。 api 描述中应该列出键。只需使用:

      [response valueForKey:@"key"]
      

      并将值分配给适当的对象:数组、字典或任何它碰巧的对象。

      【讨论】:

      • 这就是它的 MashapeResponse 而不是 NSMutableArray 或 NSMutableDictionary...它是 MashapeResponse。文档说协议应该是 -(void)requestCompleted:(id) response 但它是 -(void)requestCompleted:(MashapeResponse*) response { if([response isKindOfClass:[NSMutableDictionary class]]){ NSLog(@"NSMutableDictionary =%@", [响应正文]); }else if([response isKindOfClass:[NSMutableArray class]]){ NSLog(@"NSMutableArray=%@", [response body]); } }
      • 我使用了 netcetera api。它可能会有所不同,但对我来说,向 MashapeResponse 对象发送你想要的对象的键是有效的。我认为它存储实际的 json 并为您解析它。
      • 另外,我假设您已经阅读过它,但以防万一。以下是文档:mashape.com/docs/consume/objectivec
      • 这是我正在使用的 Lambda API:mashape.com/lambda/face-recognition#Recognize 它显示的响应是 JSON,但我得到的响应有;对于 ,
      • 我在最后的原始问题中添加了一些信息。这些 cmets 没有良好的格式...
      猜你喜欢
      • 2011-01-25
      • 1970-01-01
      • 2011-11-27
      • 2018-12-15
      • 1970-01-01
      • 2012-02-26
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      相关资源
      最近更新 更多