【问题标题】:Parsing JSON string to a NSMutableArray将 JSON 字符串解析为 NSMutableArray
【发布时间】:2012-02-12 19:48:46
【问题描述】:

这是我的字符串:

[{"id":"1","nome":"Adriatik"},{"id":"2","nome":"Ard"},{"id":"3","nome":"Albana"},{"id":"4","nome":"Adriana"}]

我想将 JSON 字符串的所有“名称”解析为 NSMutableArray

对不起我的英语!

【问题讨论】:

    标签: json parsing nsstring nsmutablearray sbjson


    【解决方案1】:

    每当我必须处理一些 JSON 代码时,我喜欢做的第一件事就是基于 JSON 文本创建一个类。因此,例如,如果您的 JSON 代表美国的一个州,请创建一个“州”类。

    有一个很酷的小产品可供您使用。它被称为Objectify,价格约为 15 美元。毫无疑问,人们可以就其他可能做类似事情的免费内容提出建议。

    对于实际的 Json 解析,我使用SBJson。有相当多的用于 Objective-C 的 Json 解析框架,所以一定要四处看看,看看你喜欢什么。

    接下来,使用 SBJson 进行实际解析:

    -(NSDictionary *)parseJsonFromUrl
    {
        NSAssert(mUrl, @"Must set a url before invoking %@", __PRETTY_FUNCTION__);
    
        // Create new SBJSON parser object
        SBJsonParser *parser = [[SBJsonParser alloc] init];
    
        // Prepare URL request to download JSON
        NSURLRequest *request = [NSURLRequest requestWithURL:mUrl];
    
        // Perform request and get JSON back as a NSData object
        NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    
        // Get JSON as a NSString from NSData response
        NSString *json_string = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
    
        // parse the JSON response into an object
        // Here we're using NSArray since we're parsing an array of JSON status objects
        return [parser objectWithString:json_string error:nil];
    }
    

    返回一个NSDictionary。您知道必须查看该字典才能设置模型类的值。下面是如何做到这一点,同时将值加载到NSMutableArray

    -(void)downloadJsonData
    {    
        NSDictionary *statesDict = [self parseJsonFromUrl];
    
        NSMutableArray *statesArray = [NSMutableArray arrayWithCapacity:[statesDict count]];
    
        for (NSDictionary *stateDict in stateDict)
        {
            State *aState = [[[State alloc] init] autorelease];
            aState.stateId = [stateDict valueForKey:@"id"];
            aState.name = [stateDict valueForKey:@"name"];
    
            [statesArray addObject:aState];
        }
    }
    

    请注意,我使用属性名称 stateId 而不是 id,以免与 Objective-C 对象指针类型发生冲突。

    【讨论】:

      【解决方案2】:

      使用 SBJson 类并调用 -JSONValue 方法

      NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
         // NSLog(@" Response String %@", responseString);
          //converted response json string to a simple NSdictionary
      
      
          NSMutableArray *results = [responseString JSONValue];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-14
        • 2012-10-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多