0

我有一个通过 OAuth 2.0 连接到服务器的 iOS 应用程序。我以这种形式返回了一个访问令牌:

{accessToken="521515.ab6dc96.51dca3d53c4236d2d4f4460b151bc58d6ec91e14"}

我将它存储在一个 NSString 中。我遇到的问题是我只需要引号中的部分。我怎样才能提取它?

更新

这是我的代码:

GTMOAuth2Authentication *auth_instagram;
auth_instagram = [GTMOAuth2ViewControllerTouch authForGoogleFromKeychainForName:@"Instagram" clientID:kMyClientID_instagram clientSecret:kMyClientSecret_instagram];

NSLog(@"%@", auth_instagram);

在 Xcode 控制台中打印的是:

GTMOAuth2Authentication 0xb2c0a80: {accessToken="541019.ab6dc96.51dc0d264d2d4f60b151bc8d6ec91e14"} 
4

5 回答 5

2

正确的方法是使用正确的格式/解析器解析整个字符串,在这种情况下可能是从元素中NSJSONSerialization提取值。accessToken

NSDictionary *parsedData = [JSONObjectWithData:[string dataUsingEncoding:NSUTF8StringEncoding] options:0 error:NULL];
NSString *value = parsedData[@"accessToken"];
于 2013-09-02T12:40:19.000 回答
2

如果我正确阅读了http://code.google.com/p/gtm-oauth2/source/browse/trunk/Source/GTMOAuth2Authentication.h上的类定义,GTMOAuth2Authentication则有

@property (retain) NSString *accessToken;

这样你就可以做到

NSString *token = auth_instagram.accessToken;

将令牌作为字符串获取。

备注:您的输出

{accessToken="521515.ab6dc96.51dca3d53c4236d2d4f4460b151bc58d6ec91e14"}

是调用 的description方法的结果GTMOAuth2Authentication。这不是 JSON。JSON看起来像

{ "accessToken" : "521515.ab6dc96.51dca3d53c4236d2d4f4460b151bc58d6ec91e14" }
于 2013-09-02T13:12:41.343 回答
0
NSArray* components = [accessStr componentsSeparatedByString: "\""];
NSString* requiredStr = [components objectAtIndex: 1];
于 2013-09-02T12:32:25.157 回答
0
 NSDictionary *dic =[NSJSONSerialization JSONObjectWithData: [YourString dataUsingEncoding:NSUTF8StringEncoding] options: NSJSONReadingMutableContainers error: &e];
//yourstring is the string in which u store and &e is just an NSError u can create urself like  NSError *e;

  NSString access_Token=[dic objectForKey:@"accessToken"];
于 2013-09-02T12:41:45.897 回答
0

你在那里得到的是有效的杰森。尝试以下操作:

NSDictionary *loginInfo = [NSJSONSerialization JSONObjectWithData:[@"{accessToken=\"521515.ab6dc96.51dca3d53c4236d2d4f4460b151bc58d6ec91e14\"}" dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableContainers error:nil];
NSString *aToken = [loginInfon objectForKey:@"accessToken"];
于 2013-09-02T12:42:38.150 回答