我使用JSON和反序列化服务如下:
NSString *filtered = [restConnection stringData];
encodData = [filtered dataUsingEncoding:NSUTF8StringEncoding];
json = [NSJSONSerialization JSONObjectWithData:encodData options:0 error:nil];
NSLog(@"json 1: %@", json);
但是现在一个新客户端使用JSONP,或者JSON使用填充服务而不是序列化它,你能帮我吗
这是一个字符串JSON标准:
NSString * @"[{\"CodigoRTA\":\"91\",\"MensajeRTA\":\"Error de Inicio de sesión: Error con la validación de seguridad de la clave para el inicio de sesión\",\"Respuesta\":\"\"}]"
NSString * @"\[{\\\"CodigoRTA\\\":\\\"91\\\",\\\"MensajeRTA\\\":\\\"Error de Inicio de sesión: Error con la validación de seguridad de la clave para el inicio de sesión\\\",\\\"Respuesta\\\":\\\"\\\"}]\""
这是JSONP的例子:
NSString * @"\"[{\\\"CodigoRTA\\\":\\\"91\\\",\\\"MensajeRTA\\\":\\\"Error de Inicio de sesión: Error con la validación de seguridad de la clave para el inicio de sesión\\\",\\\"Respuesta\\\":\\\"\\\"}]\""
答案 0 :(得分:0)
这是你从JSON获得JSONP的方法:
NSString *jsonp = [NSString stringWithFormat: @"%@(%@)", callbackName, json];
(callbackName
通常是callback
参数的值,或@"callback"
)。
如果你需要 de 序列化JSONP,只需删除第一个(
及其前面的所有内容,然后删除)
,然后获得JSON;很容易用正则表达式。
编辑:此外,我不确定我会称之为什么,但它不是JSON:
@"[{\\"CodigoRTA\\":\\"91\\",\\"MensajeRTA\\":\\"Error de Inicio de sesión: Error con la validación de seguridad de la clave para el inicio de sesión\\",\\"Respuesta\\":\\"\\"}]\""
这也不是JSONP(但至少我可以说它是什么:JSON编码的JSON):
@"\"[{\\"CodigoRTA\\":\\"91\\",\\"MensajeRTA\\":\\"Error de Inicio de sesión: Error con la validación de seguridad de la clave para el inicio de sesión\\",\\"Respuesta\\":\\"\\"}]\""
与您的第一个(正确的)JSON对应的JSONP是:
@"callback([{\"CodigoRTA\":\"91\",\"MensajeRTA\":\"Error de Inicio de sesión: Error con la validación de seguridad de la clave para el inicio de sesión\",\"Respuesta\":\"\"}])"
EDIT2: JSONP到JSON应该是这样的(我不擅长ObjC,所以你可能需要调试它):
NSRegularExpression *regex =
[NSRegularExpression regularExpressionWithPattern:@"\\((.*)"
options: NSRegularExpressionDotMatchesLineSeparators
error:NULL];
NSTextCheckingResult *searchResult =
[regex firstMatchInString:jsonp
options:0
range:NSMakeRange(0, [jsonp length])];
NSString *json = [json substringWithRange:searchResult.range];