Ios 如何解析nsstring中的json数据?

Ios 如何解析nsstring中的json数据?,ios,objective-c,json,Ios,Objective C,Json,我从api中得到这样的响应 {"token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImpvaG4uc21pdGhAZ21haWwuY29tIiwiaWQiOiI1NzFkYzI3NmU0YjA1NjVmNTcwZjM2ZGQiLCJpYXQiOjE0NjMwMjk4NDd9.yi8H75GTS-U8abcS75WcGT5ROfmM0AgCNfRIiZQzeNI","data":{"name":"John Smith","role":

我从api中得到这样的响应

{"token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImpvaG4uc21pdGhAZ21haWwuY29tIiwiaWQiOiI1NzFkYzI3NmU0YjA1NjVmNTcwZjM2ZGQiLCJpYXQiOjE0NjMwMjk4NDd9.yi8H75GTS-U8abcS75WcGT5ROfmM0AgCNfRIiZQzeNI","data":{"name":"John Smith","role":"driver"},"message":"success"}
但当我试图获取令牌的值时,它给了我null,同时当获取角色的值时,它给了我完美的值

请看我的密码

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://qa.networc.in:1336/api/drivers/login"]];
NSURLSession *session = [NSURLSession sharedSession];

NSString * params =[NSString stringWithFormat:@"email=%@&password=%@&deviceId=fc2ffdf08ccf0dc912018f7232e4aa0ffcbd856ec3faf4145649f8bb281a779d",_driverNumberTextField.text,_passwordTextField.text];
NSLog(@"params %@", params);

request.HTTPMethod = @"POST";
request.HTTPBody =[params dataUsingEncoding:NSUTF8StringEncoding];

NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
      NSLog(@"Response:%@ %@\n", response, error);
      if(error == nil)
      {
          // use NSJSON Serlizeitaion and serlize your value
          NSString * text = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
          NSLog(@"Data = %@",text);

          id object = [NSJSONSerialization
                       JSONObjectWithData:data
                       options:kNilOptions
                       error:&error];
          dictionary = [[NSJSONSerialization JSONObjectWithData:data options:0 error:nil]objectForKey:@"JSON"];
         NSString *temp;
          temp = (NSString*)[dictionary valueForKey:@"token"];
          NSLog(@"temp %@", temp);

          dictionary = [[NSJSONSerialization JSONObjectWithData:data options:0 error:nil]objectForKey:@"data"];
          Role = (NSString*)[dictionary valueForKey:@"role"];
          NSLog(@"role %@", Role);

打印出单个值并检查。访问数组
$arr[“token”]
打印单个值并检查。Access数组
$arr[“token”]
NSJSONSerialization
将返回字典,因此您无需获取
objectForKey:@“JSON”

替换

dictionary = [[NSJSONSerialization JSONObjectWithData:data options:0 error:nil]objectForKey:@"JSON"];

建议:不要为了从同一个字典中检索不同的键而再次解析字典。使用同一本字典

NSString *token = dictionary[@"token"];
NSString *role  = dictionary[@"data"][@"role"];
NSString *name  = dictionary[@"data"][@"name"];

NSJSONSerialization
将返回字典,因此您不需要使用
objectForKey:@“JSON”

替换

dictionary = [[NSJSONSerialization JSONObjectWithData:data options:0 error:nil]objectForKey:@"JSON"];

建议:不要为了从同一个字典中检索不同的键而再次解析字典。使用同一本字典

NSString *token = dictionary[@"token"];
NSString *role  = dictionary[@"data"][@"role"];
NSString *name  = dictionary[@"data"][@"name"];

请尝试以下代码: 问题在于:

dictionary = [[NSJSONSerialization JSONObjectWithData:data options:0 error:nil]objectForKey:@"JSON"];
请尝试下面的代码。希望这有帮助

NSError *error = nil;
    NSDictionary *responseObj = [NSJSONSerialization
                                 JSONObjectWithData:jsonData
                                 options:0
                                 error:&error];

if(! error) {
    NSLog(@"responseObj : %@",responseObj);
    NSString *token = [responseObj valueForKey:@"token"];
    NSDictionary *dataDic = [responseObj valueForKey:@"data"];
    NSString *role = [dataDic valueForKey:@"role"];
    NSString *name = [dataDic valueForKey:@"name"];


} else {
    NSLog(@"Error in parsing JSON");
}

请尝试以下代码: 问题在于:

dictionary = [[NSJSONSerialization JSONObjectWithData:data options:0 error:nil]objectForKey:@"JSON"];
请尝试下面的代码。希望这有帮助

NSError *error = nil;
    NSDictionary *responseObj = [NSJSONSerialization
                                 JSONObjectWithData:jsonData
                                 options:0
                                 error:&error];

if(! error) {
    NSLog(@"responseObj : %@",responseObj);
    NSString *token = [responseObj valueForKey:@"token"];
    NSDictionary *dataDic = [responseObj valueForKey:@"data"];
    NSString *role = [dataDic valueForKey:@"role"];
    NSString *name = [dataDic valueForKey:@"name"];


} else {
    NSLog(@"Error in parsing JSON");
}

//我希望它对你有用

  NSMutableDictionary *dic= [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
  NSString *strToke = [dic valueForKey:@"token"];

//我希望它对你有用

  NSMutableDictionary *dic= [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
  NSString *strToke = [dic valueForKey:@"token"];
你需要像这样做

dictionary = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
     NSString *temp =  (NSString*)[dictionary valueForKey:@"token"];
      NSLog(@"temp %@", temp);

NSDictionary *data = [dictionary valueForKey:@"data"];
  NSString *tnamemp = (NSString*)[data valueForKey:@"name"];
    NSString *role = (NSString*)[data valueForKey:@"role"];
你需要像这样做

dictionary = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
     NSString *temp =  (NSString*)[dictionary valueForKey:@"token"];
      NSLog(@"temp %@", temp);

NSDictionary *data = [dictionary valueForKey:@"data"];
  NSString *tnamemp = (NSString*)[data valueForKey:@"name"];
    NSString *role = (NSString*)[data valueForKey:@"role"];

获取密钥时出现问题 试试这个

     NSDictionary  *dataDictionary = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
     NSString *strToken =  (NSString*)[dataDictionary valueForKey:@"token"];
     NSLog(@"Token %@", strToken);

     NSString *strName = (NSString*)[[dataDictionary valueForKey:@"data"] valueForKey:@"name"];
     NSString *strRole = (NSString*)[[dataDictionary valueForKey:@"data"] valueForKey:@"role"];

获取密钥时出现问题 试试这个

     NSDictionary  *dataDictionary = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
     NSString *strToken =  (NSString*)[dataDictionary valueForKey:@"token"];
     NSLog(@"Token %@", strToken);

     NSString *strName = (NSString*)[[dataDictionary valueForKey:@"data"] valueForKey:@"name"];
     NSString *strRole = (NSString*)[[dataDictionary valueForKey:@"data"] valueForKey:@"role"];

有很多帖子都与JSON解析相关……试着找出这个问题,不要问类似的问题。你犯了一个错误,而不是dictionary=[[NSJSONSerialization JSONObjectWithData:data options:0错误:nil]objectForKey:@“JSON”];use dictionary=[NSJSONSerialization JSONObjectWithData:数据选项:0错误:nil];我犯了什么错误,先生?删除objectForKey:@“JSON”部分,因为没有像“JSON”这样的键。这里的文本有很多与JSON解析相关的帖子……试着找出这一点,不要问类似的问题。你犯了一个错误,而不是dictionary=[[NSJSONSerialization JSONObjectWithData:数据选项:0错误:nil]objectForKey:@“JSON”];使用dictionary=[NSJSONSerialization JSONObjectWithData:数据选项:0错误:无];哪里出错,先生?删除objectForKey:@“JSON”部分,因为没有像“JSON”这样的键。这里的文本是什么先生,我认为它的字典形式不在数组中?先生,我认为它的字典形式不在数组中?