Zum Inhalt springen
jsonbeautifiers
Deutsch
Java Meldungstext aus berichteten Fällen übernommen; hier nicht ausgeführt.

Illegal unquoted character ((CTRL-CHAR, code 10))

Eine Zeichenkette im Dokument enthält ein wörtliches Steuerzeichen. Code 10 ist ein Zeilenumbruch, Code 13 ein Wagenrücklauf, Code 9 ein Tabulator. JSON verlangt, dass diese escapt werden, und Jackson tut recht daran, sie abzulehnen. Es ist dasselbe zugrunde liegende Problem, das V8 „bad control character“ nennt.

Fügen Sie Ihr JSON ein und sehen Sie genau, wo es bricht

Eingabe

Nichts, was Sie einfügen, verlässt Ihren Browser. Die connect-src Erlaubnisliste macht daraus eine Garantie des Browsers statt eines Versprechens. Selbst überprüfen

Was es tatsächlich auslöst

Sortiert danach, wie oft sich das jeweilige als die Antwort herausstellt.

  1. 01 Mehrzeiliger Text, eingebettet in eine Zeichenkette

    SQL, Stacktraces, Logzeilen und Template-Inhalte tragen alle echte Zeilenumbrüche.

    Geht kaputt

    { "query": "SELECT *
    FROM users" }

    Funktioniert

    { "query": "SELECT *\nFROM users" }
  2. 02 Durch Verkettung gebautes JSON

    Interpolierte Werte werden nicht escapt. Serialisieren Sie mit ObjectMapper.writeValueAsString, statt den Text von Hand zusammenzusetzen.

    Geht kaputt

    String body = "{\"note\": \"" + note + "\"}";

    Funktioniert

    String body = mapper.writeValueAsString(Map.of("note", note));
  3. 03 Windows-Zeilenenden innerhalb eines Werts

    Der Wagenrücklauf, Code 13, ist ein eigenes Steuerzeichen und braucht \r.

Derselbe Fehler in anderen Laufzeitumgebungen

Das zugrunde liegende Problem ist identisch; nur der Wortlaut unterscheidet sich. Meldet eine Kollegin eine dieser Zeilen, sieht sie genau dasselbe wie Sie.

JavaScript (V8) Bad control character in string literal in JSON at position 11 (line 1 column 12)
Python Invalid control character at: line 1 column 8 (char 7)

Häufige Fragen

Was ist mit ALLOW_UNESCAPED_CONTROL_CHARS?
JsonReadFeature.ALLOW_UNESCAPED_CONTROL_CHARS bringt Jackson dazu, sie zu akzeptieren, und das ist eine vertretbare Notlösung, wenn Sie den Erzeuger nicht ändern können. Gültiges JSON wird das Dokument dadurch nicht, alles andere, was es konsumiert, scheitert weiterhin.

Jetzt beheben

Fügen Sie das Payload in das Werkzeug oben ein, oder gehen Sie direkt zu dem, das für diesen Zweck gebaut wurde.

Den Wert escapen