У меня проблема с моим запросом JSON-RPC.Objective-C Проблема с запросом JSON-RPC
NSString *jsonString = @"{id:1,method:getHolidays,jsonrpc:2.0}";
NSString *requestString = [NSString stringWithFormat:@"%@",jsonString,nil];
NSData *requestData = [NSData dataWithBytes: [jsonString UTF8String] length: [requestString length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL: [NSURL URLWithString:@"https://neilo.webuntis.com/WebUntis/jsonrpc.do?school=htl_v%C3%B6cklabruck"]];
[request setHTTPMethod: @"POST"];
[request setValue:@"Content-type: application/json" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:requestData];
NSData *returnData = [NSURLConnection sendSynchronousRequest: request returningResponse: nil error: nil ];
NSString *returnString = [[NSString alloc] initWithData:returnData encoding: NSUTF8StringEncoding];
NSLog(@"\n\n\noutput: %@",returnString);
Как результат я получаю этот выход:
{"jsonrpc":"2.0","id":null,"error":{"code":-32700,"message":"Parse error: Unexpected character ('i' (code 105)): was expecting double-quote to start field name\n at [Source: [email protected]; line: 1, column: 3]"}}
Результат должен быть: ->message = not-authenticated
< -
Кто-нибудь есть идея, что проблема есть?
'NSDictionary * jsonDict = @ {@ "ID": @ 1, @ "метод": "@ getHolidays", @ "jsonrpc": @ "2,0"}; NSData * jsonData = [NSJSONSerialization dataWithJSONObject: jsonDict options: 0 error: & error]; '...' [request setHTTPBody: jsonData]; 'Если вы скопируете/вставьте строку JSON в JSON Validator, вы увидите, что это недействительно (отсутствует цитата, окружающая строки). Это должно быть '{" id ": 1," method ":" getHolidays "," jsonrpc ": 2.0}', что 'NSJSONSerialization' позаботится об этом и упростит, так как оно построено из словаря (проще изменить параметр). – Larme
Да Получил! NSString * jsonString = @ "{\" id \ ": \" 1 \ ", \" method \ ": \" getHolidays \ ", \" jsonrpc \ ": \" 2.0 \ "}"; – Darkdrummer
Я бы рекомендовал использовать 'NSJSONSerialization' вместо того, чтобы самостоятельно создавать JSON String. Это безопаснее (есть параметр ошибки, если он недопустим, его легче модифицировать, особенно с изменяемым NSMutableArray/Dictionary, если есть ключ, который можно добавить или нет). Кроме того, избегайте 'sendSynchronousRequest: returnResponse: error:', предпочитает async (с 'NSURLSession'). – Larme