我有一个iOS应用程序通过OAuth 2.0连接到服务器。我以这种形式返回了一个访问令牌:
{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"}
答案 0 :(得分:2)
正确的方法是使用正确的格式/解析器解析整个字符串,在这种情况下可能是NSJSONSerialization
并从accessToken
元素中提取值。
NSDictionary *parsedData = [JSONObjectWithData:[string dataUsingEncoding:NSUTF8StringEncoding] options:0 error:NULL];
NSString *value = parsedData[@"accessToken"];
答案 1 :(得分: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
的{{1}}方法的结果。
这是而不是JSON 。 JSON看起来像
GTMOAuth2Authentication
答案 2 :(得分:0)
NSArray* components = [accessStr componentsSeparatedByString: "\""];
NSString* requiredStr = [components objectAtIndex: 1];
答案 3 :(得分: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"];
答案 4 :(得分:0)
你得到的是有效的JASON。请尝试以下方法:
NSDictionary *loginInfo = [NSJSONSerialization JSONObjectWithData:[@"{accessToken=\"521515.ab6dc96.51dca3d53c4236d2d4f4460b151bc58d6ec91e14\"}" dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableContainers error:nil];
NSString *aToken = [loginInfon objectForKey:@"accessToken"];