Sto provando a convertire un semplice codice HTML in un valore stringa in un oggetto JSON e sto riscontrando problemi nel far sì che la codifica stringa non esca dalla stringa in NSJSONSerialization .NSJSONSerializzazione serializzazione di una stringa contenente barre rovesce/e HTML viene sfuggito in modo errato
Esempio ... Ho una stringa che contiene un testo di base HTML:
NSString *str = @"<html><body><p>Samples/Text</p></body></html>";
Il risultato desiderato è JSON con HTML come valore:
{
"Title":"My Title",
"Instructions":"<html><body><p>Samples/Text</p></body></html>"
}
sto usando lo standard tecnica per convertire un NSDictionary ad un NSString contenente JSON:
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setObject:str forKey:@"Instructions"];
[dict setObject:@"My Title" forKey:@"Title"];
NSError *err;
NSData *data = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&err];
NSString *resultingString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@", resultingString);
Il JSON prodotta con questo metodo è v Alid, tuttavia il codice HTML ha tutte le barre sono fuggiti:
{
"Title":"My Title",
"Instructions":"<html><body><p>Samples \/ Text<\/p><\/body><\/html>"
}
Questo crea HTML non valido nel istruzioni JSON stringa.
Mi piacerebbe restare con NSJSONSerialization poiché lo utilizziamo in qualsiasi altro posto nel nostro framework e sono stato masterizzato prima di passare alle librerie non Apple quando vengono interrotte. Ho provato molte diverse stringhe di stringhe e tutte sfuggono alle parentesi angolari.
Apparentemente \/è una rappresentazione valida in JavaScript per i caratteri /, che è il motivo per cui la barra diretta è sfuggita (anche l'editor di testo StackOverflow lo ha sfuggito). Vedi: escaping json string with a forward slash? e anche JSON: why are forward slashes escaped?. Solo che non voglio farlo e non sembra essere un modo per impedire a iOS di sfuggire alle barre in avanti nei valori di stringa durante la serializzazione.
Un altro buon motivo per non utilizzare NSJSONSerialization, suppongo. Si possono sempre scansionare i dati e sostituire i "\ /" caratteri adiacenti con "/", ma un po 'disordinati. –
Questo è quello che sto facendo per ora, che sembra un hack.Sfortunatamente ogni framework iOS di terze parti che ho usato finora è stato disattivato dopo che gli autori originali si sono annoiati o occupati. – JasonD
Usiamo ancora SBJSON. E nel peggiore dei casi puoi scrivere il tuo - in realtà si tratta solo di linee di codice da 2K, a patto di non essere troppo stravagante. –