SBJsonParser JSONValue не удалось. Ошибка: Неверный запуск токена - PullRequest
0 голосов
/ 19 сентября 2011

Я пытаюсь получить курс обмена с помощью калькулятора iGoogle. Я успешно запустил NSURLConnection и создал результат в NSData через:

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    // Add the data to our complete response
    [urlResponse appendData:data];
}

Я сейчас анализирую JSON, возвращенный Google в:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSString *dataString =[[NSString alloc]initWithData:urlResponse encoding:NSUTF8StringEncoding];
    // log out the result
    NSLog(@" Result %@", dataString );
    NSDictionary *dic = [dataString JSONValue];
    NSLog(@" Dic %@", dic );

Я использую категорию SBJSON на NSString для анализа JSON. Мой вывод журнала ниже:

URL: http://www.google.com/ig/calculator?hl=en&q=1USD=?CRC
Result {lhs: "1 U.S. dollar",rhs: "501.756147 Costa Rican colones",error: "",icc: true}
-JSONValue failed. Error is: Illegal start of token [l]

Я просто не вижу, что не так со строкой JSON. Ни один из других ответов на этот вопрос не отражает мою проблему.

Ответы [ 2 ]

3 голосов
/ 19 сентября 2011

Это недопустимая строка JSON, потому что все строки должны быть в двойных кавычках.Например,

lhs

должно быть

"lhs"

.То же самое относится к rhs, error и icc.

Как обычно, http://jsonlint.com является полезным ресурсом для проверки, является ли строка JSON допустимой или нет.

0 голосов
/ 25 ноября 2011

Я согласен с Бавариусом.У меня была такая же ошибка при использовании SBJSON.

, если это было:

{"lhs": "1 U.S. dollar","rhs": "501.756147 Costa Rican colones","error": "","icc": "true"}

У вас не возникнет проблем, но так как этот json генерируется Google, вам придется приложить каждый ключ изначения в двойных кавычках.

Это не все, что вам нужно, но вы можете обратиться к этому коду:

//assuming its just a simple json and you already stripped it with { and } 
NSString* json = @"asd:\"hello\",dsa:\"yeah\",sda:\"kumusta\"";
//explodes json
NSArray* jsonChunks = [json componentsSeparatedByString:@","];

NSMutableString *trueJson = [[NSMutableString alloc] init];

for (int idx =0; idx < [jsonChunks count]; idx++) {
    //explodes each jsonChunks
    NSArray *chunky = [[jsonChunks objectAtIndex:idx] componentsSeparatedByString:@":"];
    //reconstruction
    if (idx+1 == [jsonChunks count]) {
        [trueJson appendFormat:@"%@:%@",[NSString stringWithFormat:@"\"%@\"",[chunky objectAtIndex:0]],[chunky objectAtIndex:1]];
    }
    else {
        [trueJson appendFormat:@"%@:%@,",[NSString stringWithFormat:@"\"%@\"",[chunky objectAtIndex:0]],[chunky objectAtIndex:1]];
    }
}
NSLog(@"trueJson: %@",trueJson);
//do the realeases yourself Xp
...