Decode JSON to NSArray or NSDictionary

前端 未结 5 1632
野的像风
野的像风 2020-11-29 09:51

I hope to decode the JSON data below:

{
    \"content\":
    [   
        {
            \"1\":\"a\",
            \"2\":\"b\",
            \"3\":\"c\",
               


        
5条回答
  •  孤独总比滥情好
    2020-11-29 10:21

    I used google speech recognition API and I was getting a json response which was not directly parsable on iOS. Results samples were like :

    First I tried saying Hello 1 2 3 which was recognised without issues. Json response was :

    {"result":[]}
    
    {"result":[{"alternative":[{"transcript":"hello 123","confidence":0.59780568},{"transcript":"hello 1 2 3"}],"final":true}],"result_index":0}
    

    Or when talked for too long, I got a 404 HTML like below :

    Error 400 (Bad Request)!!1
    

    And when I spoke gibberish , I got :

    {"result":[]}
    

    So to parse all such response, I used the below code :

     NSString *msg = @"Could not synthesize !";
    
        NSString *responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"responseString: %@",responseString);
        if([responseString containsString:@"transcript"]&&responseString.length>25)
        {
    
            responseString = [responseString stringByReplacingOccurrencesOfString:@"{\"result\":[]}" withString:@""];
    
            NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:[responseString dataUsingEncoding:NSUTF8StringEncoding] options:kNilOptions error:nil];
    
            if(dictionary!=nil)
                if(dictionary.allValues.count>0)
                {
    
                    NSArray *array =[dictionary valueForKeyPath:@"result.alternative.transcript"];
    
                    if(array)
                    {
                        NSArray *array2 = [array objectAtIndex:0];
                        if(array2)
                        {
                            NSLog(@"%@",[array2 objectAtIndex:0] );
                            msg = [array2 objectAtIndex:0];
                        };
                    }
                }
        }
    
        UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Google Response" message:msg delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alert show];
    

    Hope this helps someone.

提交回复
热议问题