JSON Parsing in iOS 7

前端 未结 14 2243
长情又很酷
长情又很酷 2020-12-04 11:25

I am creating an app for as existing website. They currently has the JSON in the following format :

[

   {
       \"id\": \"value\",
       \"array\": \"[{\         


        
相关标签:
14条回答
  • 2020-12-04 12:17
    //-------------- get data url--------
    
    NSURLRequest *request=[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://echo.jsontest.com/key/value"]];
    
    NSData *data=[NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    NSLog(@"response==%@",response);
    NSLog(@"error==%@",Error);
    NSError *error;
    
    id jsonobject=[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];
    
    if ([jsonobject isKindOfClass:[NSDictionary class]]) {
        NSDictionary *dict=(NSDictionary *)jsonobject;
        NSLog(@"dict==%@",dict);
    }
    else
    {
        NSArray *array=(NSArray *)jsonobject;
        NSLog(@"array==%@",array);
    }
    
    0 讨论(0)
  • 2020-12-04 12:17
    • You may always unescape the jsonData before deliver it to NSJSONSerialization. Or you may use the string got to construct another json object to get the array.

    • NSJSONSerialization is doing right, the value in your example should be a string.

    0 讨论(0)
  • 2020-12-04 12:18

    As another answer has said, that value is a string.

    You can get around it by turning that string into data, as it seems to be a valid json string and then parse that json data object back into an array which you can add to your dictionary as the value for the key.

    0 讨论(0)
  • 2020-12-04 12:20
    #define FAVORITE_BIKE @"user_id=%@&bike_id=%@"
    @define FAVORITE_BIKE @"{\"user_id\":\"%@\",\"bike_id\":\"%@\"}"
    NSString *urlString = [NSString stringWithFormat:@"url here"];
    NSString *jsonString = [NSString stringWithFormat:FAVORITE_BIKE,user_id,_idStr];
    NSData *myJSONData =[jsonString dataUsingEncoding:NSUTF8StringEncoding];
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    [request setURL:[NSURL URLWithString:urlString]];
    [request setHTTPMethod:@"POST"];
    NSMutableData *body = [NSMutableData data];
    [body appendData:[NSData dataWithData:myJSONData]];
    [request setHTTPBody:body];
    NSError *error;
    NSURLResponse *response;
    NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
    NSString *str = [[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding];
    if(str.length > 0)
    {
        NSData* data = [str dataUsingEncoding:NSUTF8StringEncoding];
        NSMutableDictionary *resDict =[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
    }
    
    0 讨论(0)
  • 2020-12-04 12:21

    JSON default method :

    + (NSDictionary *)stringWithUrl:(NSURL *)url postData:(NSData *)postData httpMethod:(NSString *)method
    {
        NSDictionary *returnResponse=[[NSDictionary alloc]init];
    
        @try
        {
            NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url
                                                                      cachePolicy:NSURLRequestReloadIgnoringCacheData
                                                                  timeoutInterval:180];
            [urlRequest setHTTPMethod:method];
    
            if(postData != nil)
            {
                [urlRequest setHTTPBody:postData];
            }
    
            [urlRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
            [urlRequest setValue:@"application/json" forHTTPHeaderField:@"Accept"];
            [urlRequest setValue:@"text/html" forHTTPHeaderField:@"Accept"];
    
            NSData *urlData;
            NSURLResponse *response;
            NSError *error;
            urlData = [NSURLConnection sendSynchronousRequest:urlRequest
                                            returningResponse:&response
                                                        error:&error];
            returnResponse = [NSJSONSerialization
                              JSONObjectWithData:urlData
                              options:kNilOptions
                              error:&error];
        }
        @catch (NSException *exception)
        {
            returnResponse=nil;
        }
        @finally
        {
            return returnResponse;
        }
    }
    

    Return method:

    +(NSDictionary *)methodName:(NSString*)string{
        NSDictionary *returnResponse;
        NSData *postData = [NSData dataWithBytes:[string UTF8String] length:[string length]];
        NSString *urlString = @"https//:..url....";
        returnResponse=[self stringWithUrl:[NSURL URLWithString:urlString] postData:postData httpMethod:@"POST"];    
        return returnResponse;
    }
    
    0 讨论(0)
  • 2020-12-04 12:23

    The correct JSON should presumably look something like:

    [
        {
            "id": "value",
            "array": [{"id": "value"},{"id": "value"}]
        },
        {
            "id": "value",
            "array": [{"id": "value"},{"id": "value"}]
        }
    ]
    

    But, if you're stuck this the format provided in your question, you need to make the dictionary mutable with NSJSONReadingMutableContainers and then call NSJSONSerialization again for each of those array entries:

    NSMutableArray *array = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];
    if (error)
        NSLog(@"JSONObjectWithData error: %@", error);
    
    for (NSMutableDictionary *dictionary in array)
    {
        NSString *arrayString = dictionary[@"array"];
        if (arrayString)
        {
            NSData *data = [arrayString dataUsingEncoding:NSUTF8StringEncoding];
            NSError *error = nil;
            dictionary[@"array"] = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
            if (error)
                NSLog(@"JSONObjectWithData for array error: %@", error);
        }
    }
    
    0 讨论(0)
提交回复
热议问题