Code pour échapper aux chaînes JSON en Java

JSON pas encore officiellement pris en charge par Java

Pour créer des données volumineuses, je pense que l'option d'utiliser Jackson ou Gson est normale, Je veux créer de petites données avec des fonctions simples sans compter sur de riches bibliothèques. Le problème à de tels moments est le processus d'échappement de chaîne.

La cible d'échappement est

Caractère cible Code d'octet Notation d'échappement
BS 0x08 \b
HT 0x09 \t
LF 0x0A \n
FF 0x0C \f
CR 0x0D \r
" 0x22 "
/ 0x2F /
\ 0x5C \ \

code

Cette méthode remplace la chaîne de caractères octet par octet.

private static String escapeJsonString(CharSequence cs) {
	
	final byte BACKSLASH = 0x5C;
	final byte[] BS = new byte[]{BACKSLASH, 0x62};	/* \\b */
	final byte[] HT = new byte[]{BACKSLASH, 0x74};	/* \\t */
	final byte[] LF = new byte[]{BACKSLASH, 0x6E};	/* \\n */
	final byte[] FF = new byte[]{BACKSLASH, 0x66};	/* \\f */
	final byte[] CR = new byte[]{BACKSLASH, 0x72};	/* \\r */
	
	try (
			ByteArrayOutputStream strm = new ByteArrayOutputStream();
			) {
		
		byte[] bb = cs.toString().getBytes(StandardCharsets.UTF_8);
		
		for (byte b : bb) {
			
			if (b == 0x08 /* BS */) {
				
				strm.write(BS);
				
			} else if (b == 0x09 /* HT */) {
				
				strm.write(HT);
				
			} else if (b == 0x0A /* LF */) {
				
				strm.write(LF);
				
			} else if (b == 0x0C /* FF */) {
				
				strm.write(FF);
				
			} else if (b == 0x0D /* CR */) {
				
				strm.write(CR);
				
			} else if (
					b == 0x22 /* " */
					|| b == 0x2F /* / */
					|| b == BACKSLASH /* \\ */
					) {
				
				strm.write(BACKSLASH);
				strm.write(b);
				
			} else {
				
				strm.write(b);
			}
		}
		
		return new String(strm.toByteArray(), StandardCharsets.UTF_8);
	}
	catch (IOException notHappen) {
		throw new RuntimeException(notHappen);
	}
}

tester

public static void main(String[] args) {
		
	String before = "abc \b \t \n \f \r / \\ \"";
	String escaped = escapeJsonString(before);
	System.out.println("{\"value\":\"" + escaped + "\"}");
		
	/* {"value":"abc \b \t \n \f \r \/ \\ \""} */	
}

Recommended Posts

Code pour échapper aux chaînes JSON en Java
Exemple de code pour convertir List en List <String> dans Java Stream
Convertir un tableau d'octets Java en une chaîne hexadécimale
Comment stocker des chaînes de ArrayList à String en Java (personnel)
J'ai essayé de convertir une chaîne de caractères en un type LocalDate en Java
Notation pour mettre des variables dans une chaîne
Toutes les mêmes chaînes de code de hachage en Java
Diviser une chaîne avec ". (Dot)" en Java
Convertir en balise dans la chaîne d'URL avec Rails
Lire une chaîne dans un fichier PDF avec Java
Exemple de code pour la sérialisation et la désérialisation des énumérations Java Enum et JSON dans Jackson
Comment afficher une page Web en Java
Essayez de créer un babillard en Java
Je voulais que (a == 1 && a == 2 && a == 3) vrai en Java
POST JSON en Java
Créer JSON en Java
Comment écrire Java String # getBytes dans Kotlin?
J'ai essayé de créer une compétence Clova en Java
Comment créer un URI de données (base64) en Java
J'ai essayé de créer une fonction de connexion avec Java
Comment afficher un aperçu du navigateur avec VS Code
[Java] Comment découper une chaîne de caractères caractère par caractère
[Java] Comment effacer un caractère spécifique d'une chaîne de caractères
Comment convertir A en A et A en A en utilisant le produit logique et la somme en Java
Comment convertir un fichier en tableau d'octets en Java
Essayez de résoudre un problème FizzBuzz restreint en Java
Java11: exécuter le code Java dans un seul fichier tel quel
Rechercher un sous-ensemble en Java
Java avec Visual Studio Code
Écrire du code de type Java8 en Java8
POST Json en Java ~ HttpURLConnection ~
Sérialisation / désérialisation Json dans Java 1.4
Code à utiliser lorsque vous souhaitez traiter Json en Java avec uniquement des bibliothèques standard
Comment utiliser les données JSON dans la communication WebSocket (Java, JavaScript)
Comment changer une chaîne dans un tableau en un nombre dans Ruby
[Débutant] J'ai créé un programme pour vendre des gâteaux en Java
Je voulais juste créer une propriété réactive en Java
Créer une méthode pour renvoyer le taux de taxe en Java
Comment sélectionner une date spécifiée par code dans le calendrier FS
Éléments à prendre en compte lors de l'écriture de code en Java
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3
Comment développer et enregistrer une application Sota en Java
Comment simuler le téléchargement de formulaires post-objet vers OSS en Java
J'ai créé un client RESAS-API en Java
Un mémo pour démarrer la programmation Java avec VS Code (version 2020-04)
Devinez le code de caractère en Java
3 Implémentez un interpréteur simple en Java
Multithread pour s'adapter au modèle [Java]
J'ai créé un PDF avec Java.
Comment créer un conteneur Java
Comment apprendre JAVA en 7 jours
Enregistrer la sortie dans un fichier en Java
Code de création de chaîne arbitraire par Java
Un exemple simple de rappels en Java
Comment utiliser les classes en Java?
Comment nommer des variables en Java
Essayez d'implémenter Yuma en Java