0

这是我的字符串:

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

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

对不起我的英语不好!

4

2 回答 2

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];
    }
}

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

于 2012-02-14T12:06:06.440 回答
0

使用 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];
于 2012-02-14T11:58:21.790 回答