2010-09-07 6 views
5

J'utilise la bibliothèque JSON officielle pour mon projet java. J'ai remarqué quelque chose de bizarre.Chaînes JSON et comment gérer les caractères d'échappement

Si j'ai un JSON comme celui-ci:

{ 
    "text": "This is a multiline\n text" 
} 

Et j'essaie d'obtenir la chaîne comme ceci:

System.out.println(jsonObject.getString("text")); 

-je obtenir ceci sur la sortie:

This is a multiline\n text 

Au lieu de:

This is a multiline 
text 

Quelqu'un sait-il comment gérer correctement les caractères spéciaux tels que \ n et \ t? Je pourrais toujours remplacer chacun d'entre eux mais je devrais les gérer tous un par un.

Répondre

1

Votre exemple ci-dessus est correct et affiche correctement, mais il est « lisible » \ n (qui serait \ n dans une chaîne) et il y a un caractère échappé \ n (qui serait le \ n brut dans une chaîne). Je suppose que la bibliothèque que vous utilisez génère le code lisible par l'utilisateur plutôt que le code d'échappement approprié.

Essayez: json_obj.text.replace(/\\n/g,"\n"); de reconvertir la chaîne.

+0

comme je l'ai dit dans ma question, je pourrais remplacer tous ces cas mais je voudrais avoir à gérer tous les caractères spéciaux moi-même comme \ t. Je me demandais s'il y avait une façon «correcte» de traiter cette affaire. –

+0

Je vois un chargement de bibliothèques supporté sur http://www.json.org/ lequel est-ce que vous utilisez? – Rudu

+0

le "officiel". le org.json un .. –

4

Vous avez pas échappé correctement votre nouvelle ligne, il devrait être:

{ 
    "text": "This is a multiline\\n text" 
} 
+0

je vois ... Le problème est que j'obtiens mes chaînes json d'un webservice et c'est comme ça qu'elles les servent. Connaissez-vous un moyen général de convertir une chaîne comme celle que j'ai spécifiée au bon format? –

+0

La nouvelle ligne d'échappement dans votre code est un antislash littéral suivi du caractère n et pas du tout une séquence d'échappement. – Rudu

+0

Je comprends ce qu'est le "problème". Je demande juste s'il y a une manière automatisée de manipuler la chaîne comme elle serait manipulée si elle l'a tapée comme est dans un dossier de Java ... –