【问题标题】:how can i parse a json string into nsdictionary?如何将 json 字符串解析为 nsdictionary?
【发布时间】:2012-04-06 09:37:46
【问题描述】:

我正在为登录应用程序编写代码。谁能帮我解析一个json字符串? 我的代码是

-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{

    NSString *loginStatus = [[NSString alloc] initWithBytes: [webData mutableBytes] length:[webData length] encoding:NSUTF8StringEncoding];

    SBJsonParser *parser = [[SBJsonParser alloc] init];

    NSArray *loginDict = [parser objectWithString:loginDict error:nil];

    [loginStatus release];

    [connection release];

【问题讨论】:

  • 您不需要使用 SBJsonParser,只需使用发布的 2 行即可解决您的解析问题。
  • 请注意,json.org 列出了 5 个开源 JSON 解析器,另外还有内置于 iOS/OSx 中的 Apple 解析器。你可以选择任何你想要的。

标签: iphone objective-c


【解决方案1】:

示例数据:

NSString *strData = @"{\"1\": {\"name\": \"Jerry\",\"age\": \"12\"}, \"2\": {\"name\": \"Bob\",\"age\": \"16\"}}";
NSData *webData = [strData dataUsingEncoding:NSUTF8StringEncoding];

NSError *error;
NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:webData options:0 error:&error];
NSLog(@"JSON DIct: %@", jsonDict);

NSLog 输出:

JSON DIct: {
     1 =     {
         age = 12;
         name = Jerry;
     };
     2 =     {
         age = 16;
         name = Bob;
     };
}

【讨论】:

    【解决方案2】:
    //*************Static Resopnse
    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"demo" ofType:@"text"];
    NSLog (@"Content: %@", filePath);
    NSString *content = [[[NSString alloc] initWithContentsOfFile:filePath
                                                     usedEncoding:nil
                                                            error:nil] autorelease];
    
    SBJSON *json = [[SBJSON new] autorelease];
    NSString *str=[[NSString alloc]initWithString:content];
    dictTemp = [json objectWithString:str error:nil];
    NSLog(@"Actions is: %@",dictTemp);
    NSArray *arr=[[dictTemp valueForKey:@"Data"] mutableCopy];
    arrX=[[NSMutableArray alloc] init];
    arrY=[[NSMutableArray alloc] init];
    
    for(NSDictionary *dict in arr)
    {
        [arrX addObject:[dict valueForKey:@"Milestone"]];
        [arrY addObject:[dict valueForKey:@"Sites"]];
    }   
    NSLog(@"X is: %@",[arrX description]);
    NSLog(@"Y is: %@",[arrY description]);
    

    【讨论】:

      【解决方案3】:
      NSString *loginStatus = [[NSString alloc] initWithBytes: [webData mutableBytes] length:[webData length] encoding:NSUTF8StringEncoding]
      NSLog([[loginStatus JSONValue] description],nil);
      
      //This will give you parsed output.
      

      【讨论】:

      • 在我看来,如果他尝试这样做,他会发现 JSONValue 是一个未定义的方法。
      • JSONValue 不是 NSString 的方法,它包含在一个名为 SBJson 的包中,我认为...此代码无法开箱即用。最好按照stackoverflow.com/questions/10122534/jsonvalue-arc-issue使用NSJSONSerialization@
      • 好吧,OP 在他的问题中使用 SBJsonParser。
      【解决方案4】:
         NSString *responseString = [[NSString alloc] initWithData:responseData encoding:  NSASCIIStringEncoding];
         NSlog(@"json String is: %@",responseString);
         NSDictionary *dictionary = [responseString JSONValue];
         NSLog(@"Dictionary value is  %@", [dictionary objectForKey:@"json"]);
      

      这段代码的结果是:json String is: {"json":{"Success":"Activation code."}}

      对话后的结果是 -------- 字典值为 { Success = "激活码。"};

      【讨论】:

      • 什么是 JSONValue?您在 NSString 上创建的某个类别?
      猜你喜欢
      • 1970-01-01
      • 2016-01-13
      • 2020-02-28
      • 2011-03-14
      • 1970-01-01
      • 2015-05-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多