Code zum Escapezeichen von JSON-Zeichenfolgen in Java

JSON wird von Java noch nicht offiziell unterstützt

Für die Erstellung großer Datenmengen halte ich die Verwendung von Jackson oder Gson für normal. Ich möchte kleine Daten mit einfachen Funktionen erstellen, ohne auf umfangreiche Bibliotheken angewiesen zu sein. Das Problem in solchen Zeiten ist der String-Escape-Prozess.

Das Fluchtziel ist

Zielcharakter Bytecode Escape-Notation
BS 0x08 \b
HT 0x09 \t
LF 0x0A \n
FF 0x0C \f
CR 0x0D \r
" 0x22 "
/ 0x2F /
\ 0x5C \ \

Code

Diese Methode ersetzt die Zeichenfolge byteweise.

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);
	}
}

Prüfung

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 zum Escapezeichen von JSON-Zeichenfolgen in Java
Beispielcode zum Konvertieren von List in List <String> in Java Stream
Konvertieren Sie ein Java-Byte-Array in eine hexadezimale Zeichenfolge
Speichern von Zeichenfolgen von ArrayList zu Zeichenfolge in Java (Personal)
Ich habe versucht, in Java von einer Zeichenfolge in einen LocalDate-Typ zu konvertieren
Notation zum Einfügen von Variablen in eine Zeichenfolge
Alle gleichen Hash-Code-Zeichenfolgen in Java
Teilen Sie eine Zeichenfolge in Java mit ". (Dot)"
Mit Rails in eine Tag-zu-URL-Zeichenfolge konvertieren
Lesen Sie eine Zeichenfolge in einer PDF-Datei mit Java
Beispielcode zum Serialisieren und Deserialisieren von Java Enum-Enumerationen und JSON in Jackson
So zeigen Sie eine Webseite in Java an
Versuchen Sie, ein Bulletin Board in Java zu erstellen
Ich wollte (a == 1 && a == 2 && a == 3) in Java wahr machen
POST JSON in Java
Erstellen Sie JSON in Java
Wie schreibe ich Java String # getBytes in Kotlin?
Ich habe versucht, eine Clova-Fähigkeit in Java zu erstellen
So erstellen Sie einen Daten-URI (base64) in Java
Ich habe versucht, eine Anmeldefunktion mit Java zu erstellen
So zeigen Sie eine Browser-Vorschau mit VS-Code an
[Java] So schneiden Sie eine Zeichenfolge zeichenweise aus
[Java] So löschen Sie ein bestimmtes Zeichen aus einer Zeichenfolge
So konvertieren Sie A in a und a in A mit logischem Produkt und Summe in Java
So konvertieren Sie eine Datei in ein Byte-Array in Java
Versuchen Sie, ein eingeschränktes FizzBuzz-Problem in Java zu lösen
Java11: Führen Sie Java-Code unverändert in einer einzelnen Datei aus
Suchen Sie eine Teilmenge in Java
Java mit Visual Studio Code
Schreiben Sie Java8-ähnlichen Code in Java8
POST Json in Java ~ HttpURLConnection ~
Json-Serialisierung / Deserialisierung in Java 1.4
Code, der verwendet werden soll, wenn Sie Json nur mit Standardbibliotheken in Java verarbeiten möchten
Verwendung von JSON-Daten in der WebSocket-Kommunikation (Java, JavaScript)
So ändern Sie eine Zeichenfolge in einem Array in eine Zahl in Ruby
[Anfänger] Ich habe ein Programm zum Verkauf von Kuchen in Java erstellt
Ich wollte nur eine reaktive Eigenschaft in Java erstellen
Erstellen Sie eine Methode, um den Steuersatz in Java zurückzugeben
So wählen Sie ein bestimmtes Datum anhand des Codes im FS-Kalender aus
Dinge, die Sie beim Schreiben von Code in Java beachten sollten
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben
So entwickeln und registrieren Sie eine Sota-App in Java
So simulieren Sie das Hochladen von Post-Object-Formularen in OSS in Java
Ich habe einen RESAS-API-Client in Java erstellt
Ein Memo zum Starten der Java-Programmierung mit VS Code (Version 2020-04)
Errate den Zeichencode in Java
3 Implementieren Sie einen einfachen Interpreter in Java
Multithreaded passend zur [Java] Vorlage
Ich habe ein PDF mit Java erstellt.
So erstellen Sie einen Java-Container
Wie man JAVA in 7 Tagen lernt
Protokollausgabe in Datei in Java
Beliebiger Code zum Erstellen von Zeichenfolgen durch Java
Ein einfaches Beispiel für Rückrufe in Java
Wie verwende ich Klassen in Java?
So benennen Sie Variablen in Java
Versuchen Sie, Yuma in Java zu implementieren