JSON String in Java Object schreiben - Anführungszeichen rauskriegen?

HolyFUT

Mitglied
Hallo zusammen,
ich habe aktuell ein Problem das ich nicht gelöst kriege und Google-Suche konnte mir bislang nicht weiterhelfen.

Ich habe ein Frontend in HTML, CSS und JavaScript. Mit JavaScript möchte ich gerne Daten an mein Jakarta EE WebSocket Server senden. Hier ist mir JSON in den Sinn gekommen. Ich sende an mein Backend einen String, der wie ein JSON Objekt aufgebaut ist, und das Backend wandelt den JSON String in ein JsonObject um.

Leider stoße ich hier auf eine doofe Hürde. Das JsonObject wird erstellt, allerdings mit doppelten Anführungszeichen. Das sieht dann zB so aus:

JsonObject in Java:
{ "token": "SLK2", "header": "32"}

Mein Json String in JavaScript:
'{ "token": "SLK2", "header": "32"}';

Welchen Weg könnte ich einschlagen, um diese Anführungszeichen (native) rauszukriegen?

Info: Merkwürdigerweise kann ich mit dem JsonObject auch arbeiten. Wenn mittels System.out.println(jsonReader.readObject().get("token")) den token holen möchte, holt er mir den auch, obwohl hier Anführungszeichen gesetzt sind.
 

httpdigest

Top Contributor
Info: Merkwürdigerweise kann ich mit dem JsonObject auch arbeiten. Wenn mittels System.out.println(jsonReader.readObject().get("token")) den token holen möchte, holt er mir den auch, obwohl hier Anführungszeichen gesetzt sind.
Also mit anderen Worten: Es ist alles so wie es sein soll und alles funktioniert ohne Probleme.
Nur, aus irgendwelchen unerfindlichen Gründen glaubst du, du müsstest irgendwo irgendwelche Anführungszeichen "rauskriegen"?
 

HolyFUT

Mitglied
Also mit anderen Worten: Es ist alles so wie es sein soll und alles funktioniert ohne Probleme.
Nur, aus irgendwelchen unerfindlichen Gründen glaubst du, du müsstest irgendwo irgendwelche Anführungszeichen "rauskriegen"?
Verstehe ich nicht. Warum sollten sie denn drin bleiben? Bei einer Erstellung eines Strings in Java fügt er auch nicht einfach Anführungszeichen in den String hinzu.

Außerdem möchte ich gerne die Verarbeitung des Strings, dass die Anführungszeichen raus sind, vermeiden. Lasse ich die Anführungszeichen drin, hindert es mich daran Strings zu vergleichen, Listen aufzurufen etc. weil zB. der Identifier für eine Liste nicht Token lautet sondern "Token"
 

LimDul

Top Contributor
Die gehören da hin die Anführungszeichen. Die Probleme die du nennst verstehe ich nicht, die json lib entfernt die automatische wie du schon festgestellt hast
 

httpdigest

Top Contributor
Verstehe ich nicht.
Du hast doch selbst gesagt, dass:
Info: Merkwürdigerweise kann ich mit dem JsonObject auch arbeiten. Wenn mittels System.out.println(jsonReader.readObject().get("token")) den token holen möchte, holt er mir den auch, obwohl hier Anführungszeichen gesetzt sind.
Also habe ich das für mich übersetzt zu: "Ich kann wunderbar damit arbeiten und alles funktioniert, wie es sein soll (readobject().get("token") funktioniert - wie es auch soll, nehme ich mal an)".
Deswegen habe ich nicht verstanden, was denn das eigentliche Problem ist.

Oder anders gefragt: Warum glaubst du, dass du selbst irgendwelche Anführungszeichen (die Teil der JSON Syntax sind) entfernen müsstest? Was geht denn nicht? Wo ist genau das (reproduzierbare) Problem?
 

HolyFUT

Mitglied
Okay, ich glaube ich hätte hier etwas konkreter werden müssen, entschuldigt haha.

System.out.println(jsonReader.readObject().get("header")) - kein Problem. Funktioniert. Gibt mir den String aus. Der String im Key token lautet allerdings "32" (Beispiel!).

Bei einem ParseInt zB.:
Integer header = Integer.parseInt(String.valueOf(data.get("header")));

knallt es hier, da der String aufgrund der weiteren Anführungszeichen hier keinen Integer casten kann
java.lang.NumberFormatException: For input string: ""32""

Werte aus einer HashMap kann ich ebenfalls nicht kriegen. Weil ich als Key "MEINWERT" immer die Anführungszeichen mitgebe. Die Anführungszeichen sind im String mit drin.
 

KonradN

Super-Moderator
Mitarbeiter
Mit welcher JSON Library arbeitest Du? Evtl. liegt es daran, dass du da nur ein get aufrufst und kein getString? Der JSON Ausdruck ist genau so richtig. Da müssen die Anführungszeichen enthalten sein. Und da sollte dann eigentlich alles richtig ausgewertet werden.
 

HolyFUT

Mitglied
Mit welcher JSON Library arbeitest Du? Evtl. liegt es daran, dass du da nur ein get aufrufst und kein getString? Der JSON Ausdruck ist genau so richtig. Da müssen die Anführungszeichen enthalten sein. Und da sollte dann eigentlich alles richtig ausgewertet werden.
Hey KonradN,
ich arbeite hier mit den normalen Jakarta JSON Funktionen. Konkret:
Java:
import jakarta.json.Json;
import jakarta.json.JsonException;
import jakarta.json.JsonObject;
import jakarta.json.JsonReader;
 

KonradN

Super-Moderator
Mitarbeiter
Ok, ich habe das jetzt einmal etwas ausgetestet. Mein erster Gedanke hat sich bestätigt. Du nutzt get was die puren Daten zurück gibt. Du solltest getString statt dessen verwenden.

Interessant finde ich, dass dies eine Besonderheit der Implementation zu sein scheint. org.json:json zeigt dieses Verhalten nicht. Da gibt get das Gleiche zurück wie getString (nur eben als Object).
Die glasfish Implementation von jakarta.json verhält sich aber so, wie Du es aufgezeigt hast.

Also die Lösung konkret ist dann:
Statt
Integer header = Integer.parseInt(String.valueOf(data.get("header")));
solltest Du
Integer header = Integer.parseInt(data.getString("header"));
verwenden.
 

KonradN

Super-Moderator
Mitarbeiter
Ach, was schreibe ich denn? Du brauchst kein Integer.parseInt(data.getString(...)) - nutz einfach direkt ein data.getInt(...)

Edit: Wie @httpdigest richtig angemerkt hat, ist dies so natürlich Unsinn gewesen.
 
Zuletzt bearbeitet:

httpdigest

Top Contributor
Ich denke nicht, dass getInt funktioniert, weil es in seinem json
Code:
{ "token": "SLK2", "header": "32"}
ja kein number ist, sondern ein String.
 
Zuletzt bearbeitet:

KonradN

Super-Moderator
Mitarbeiter
get() liefert in dem Fall das JSONString Objekt, dessen toString() Methode eben die JSON kodierte Form zurückliefert.
Das erklärt es etwas. Aber das Problem ist hier auch, dass es eben keine Methode vom eigentlichen JsonObject ist sondern nur geerbt von Map. Damit ist das vermutlich nicht wirklich definiert, was da raus kommt und unterschiedliche Implementationen liefern unterschiedliche Ergebnisse.

Ich denke nicht, dass getInt funktioniert, weil es in json ja kein number ist, sondern ein String.
Da hast Du natürlich Recht. getnt funktioniert mit JsonNumber und die haben wir hier nicht.
 

httpdigest

Top Contributor
Bin mit nicht sicher, ob man sagen kann, dass es undefiniert ist. Vom Typ her ist ein JSONObject, wie du schon sagtest, auch eine Map, aber eben eine Map<String, JsonValue> ( https://jakarta.ee/specifications/platform/9/apidocs/jakarta/json/jsonobject ), was dann wiederum klärt, dass get() eben das JsonValue Objekt zurückliefert, dessen toString() ja definiert, dass die JSON kodierte Form zurückgeliefert wird.

Aber intuitiv ist es nicht.
 

KonradN

Super-Moderator
Mitarbeiter
Ja, da hast Du Recht. Die JEE API hat das so schon durchaus richtig definiert.

Irgendwie denke ich gerade zu wenig nach, wenn ich antworte. Erst das mit dem getInt und dann jetzt der Denkfehler: JEE API hat das durchaus richtig dokumentiert. Andere Implementationen wie org.json:json haben ja mit der JEE API nichts direkt zu tun und da ist JSONObject nicht einmal eine Map. Fern sehen und Forum schreiben verträgt sich nicht wirklich.

Danke für die vielen Richtigstellungen!
 

Oneixee5

Top Contributor
JsonObject in Java:
{ "token": "SLK2", "header": "32"}
Das Problem ist deine Einagbe in das JS-Objekt:
Javascript:
let o = { token: "SLK2", header: 32 }; // 32 as number
console.log("object: ", o);
console.log("string: ", JSON.stringify(o));

o = { token: "SLK2", header: "32" }; // 32 as string
console.log("object: ", o);
console.log("string: ", JSON.stringify(o));
Ergebnis:
Code:
object:  {token: 'SLK2', header: 32}
string:  {"token":"SLK2","header":32}
object:  {token: 'SLK2', header: '32'}
string:  {"token":"SLK2","header":"32"}
Es ist also deutlich zu sehen, dass du ins JS schon die 32 als String anstatt als Number einfügst.
 

HolyFUT

Mitglied
Das Problem ist deine Einagbe in das JS-Objekt:
Javascript:
let o = { token: "SLK2", header: 32 }; // 32 as number
console.log("object: ", o);
console.log("string: ", JSON.stringify(o));

o = { token: "SLK2", header: "32" }; // 32 as string
console.log("object: ", o);
console.log("string: ", JSON.stringify(o));
Ergebnis:
Code:
object:  {token: 'SLK2', header: 32}
string:  {"token":"SLK2","header":32}
object:  {token: 'SLK2', header: '32'}
string:  {"token":"SLK2","header":"32"}
Es ist also deutlich zu sehen, dass du ins JS schon die 32 als String anstatt als Number einfügst.
Moin Oneixee, danke dir für deinen Beitrag. Da hast du natürlich recht! Jedoch laufe ich hier dann in andere "Probleme" rein, weil ja grundsätzlich jeder String die Anführungszeichen im String drin hat - hat sich ja aber mittlerweile gelöst, trotzdem auf jeden Fall danke für deinen Input.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I API - zurückgegebener JSON String lesen und in Entity konvertieren Java Basics - Anfänger-Themen 2
J String aus Json File parsen Java Basics - Anfänger-Themen 6
S JSON String in Object umwandeln Java Basics - Anfänger-Themen 3
I JSON in Objekt umwandeln Java Basics - Anfänger-Themen 3
J JSON mit einem JPanel Java Basics - Anfänger-Themen 3
J Objekte in JSON speichern?? Java Basics - Anfänger-Themen 1
V JSON-Objs aus JSON-Obj filtern und löschen (Manipulation ohne Kenntnis der vollst. Struktur) Java Basics - Anfänger-Themen 12
I JSON / XML Struktur mit Vererbung / Interfaces Java Basics - Anfänger-Themen 0
I JSON - cannot deserialize from Object value Java Basics - Anfänger-Themen 16
S JSON einlesen und benutzen Java Basics - Anfänger-Themen 5
BATMAN_2008 Jackson adding additional fields to JSON throws java.util.concurrent.CompletionException: Java Basics - Anfänger-Themen 2
I JSON und Interface Java Basics - Anfänger-Themen 3
J Wert in einer json Datei ändern und speichern Java Basics - Anfänger-Themen 3
J Json Datei auslesen Java Basics - Anfänger-Themen 4
J JSON-HashMap Java Basics - Anfänger-Themen 3
P JSON-Array auf Excel-Spalten verteilen? Java Basics - Anfänger-Themen 5
P Variablen HttpResponse.getBody() wird automatisch org.json Object und kann nicht zu json.simple Object gecastet werden? Java Basics - Anfänger-Themen 7
P Ressourcen für JSON & API Informationen? Java Basics - Anfänger-Themen 1
D JSON in JSOUP ELEMENTS Java Basics - Anfänger-Themen 1
M Wie analysiert JSON eine toString-Ausgabe ? Java Basics - Anfänger-Themen 1
F POST-Request mit json - Abfrage mit Java Java Basics - Anfänger-Themen 2
R Value von einem JSON-Objekt ausgeben Java Basics - Anfänger-Themen 4
S JSON Datei schreiben und lesen Java Basics - Anfänger-Themen 3
F Kann JSON nicht deserialisieren Java Basics - Anfänger-Themen 0
R JSON Array Java Basics - Anfänger-Themen 4
E Erste Schritte Wie führe ich org.json.jar aus? Java Basics - Anfänger-Themen 6
M JSON Format Java Basics - Anfänger-Themen 5
I JSON Datei in Array umwandeln Java Basics - Anfänger-Themen 1
A JSON Lesen und Schreiben. Java Basics - Anfänger-Themen 3
L Jackson JSON parsen Java Basics - Anfänger-Themen 7
A JSON versenden Java Basics - Anfänger-Themen 2
N JSON - komme nicht weiter Java Basics - Anfänger-Themen 2
Y Fehler in Json Datei Java Basics - Anfänger-Themen 4
F JSON null macht mir ein Problem Java Basics - Anfänger-Themen 3
N Suchfeld, JSON Java Basics - Anfänger-Themen 2
F JSON in dokumentierten Format als PDF Java Basics - Anfänger-Themen 3
P JSON-Konfigurationsdatei verwenden: Probleme mit Pfad Java Basics - Anfänger-Themen 1
J JSON Java Basics - Anfänger-Themen 2
F JSON von XBMC Java Basics - Anfänger-Themen 1
Traxter JSON in Java Java Basics - Anfänger-Themen 15
B Best Practice JSON Datei zerlegen Java Basics - Anfänger-Themen 1
Joew0815 Interface JSON Objekte aus Java Objekten erzeugen Java Basics - Anfänger-Themen 9
C XML und/oder JSON Java Basics - Anfänger-Themen 3
J Funktion um JSON per Post senden/emfangen Java Basics - Anfänger-Themen 3
L Input/Output JSON Objekt abrufen und ausgeben Java Basics - Anfänger-Themen 9
D JSON Java Basics - Anfänger-Themen 4
R JSON - Ausgabe als HTML mit gson Java Basics - Anfänger-Themen 6
F JSON to JAVA (und vice versa) Java Basics - Anfänger-Themen 2
M JSON Datensätze aus Website in Tabelle Java Basics - Anfänger-Themen 17
C Java, Javascript, Dojox und JSON Java Basics - Anfänger-Themen 4
krgewb String mit Datumsangabe in Long umwandeln Java Basics - Anfänger-Themen 2
D String Groß/Kleinschreibung Ignorieren Java Basics - Anfänger-Themen 4
D Map<String, Integer> sortieren und der reinfolge nach die Glieder abfragen Java Basics - Anfänger-Themen 3
J Ähnlichen String in Liste finden Java Basics - Anfänger-Themen 6
Kartoffel_1 String transformation Java Basics - Anfänger-Themen 7
H String-Operation replace() - Zeichenkette verdoppeln Java Basics - Anfänger-Themen 2
K String analysieren Java Basics - Anfänger-Themen 27
Beowend String zu Date parsen Java Basics - Anfänger-Themen 1
Beowend String auf Satzzeichen überprüfen? Java Basics - Anfänger-Themen 6
H Liste nach String-Länge sortieren Java Basics - Anfänger-Themen 1
String in ArrayList umwandeln Java Basics - Anfänger-Themen 1
I Sass Compiler und String erhalten? Java Basics - Anfänger-Themen 7
Avalon String in Double bzw. Währung konvertieren Java Basics - Anfänger-Themen 6
T Methode akzeptiert String nicht Java Basics - Anfänger-Themen 18
F Arraylist<String>Ein Wort pro Zeile Java Basics - Anfänger-Themen 6
J Schlüsselworte Prüfen, ob ein bestimmtes, ganzes Wort in einem String enthalten ist. Java Basics - Anfänger-Themen 6
N String überprüfen Java Basics - Anfänger-Themen 3
E String zerlegen aus args Java Basics - Anfänger-Themen 1
M Long-Typ in String-Änderung führt zu keinem Ergebnis bei großer Zahl Java Basics - Anfänger-Themen 11
Ostkreuz String Exception Java Basics - Anfänger-Themen 8
W Items löschen aus String Array vom Custom Base Adapter Java Basics - Anfänger-Themen 2
MoxMorris Wie macht man String[] = String[] aus einer anderer Methode? Java Basics - Anfänger-Themen 18
J String Filter Java Basics - Anfänger-Themen 5
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
R Größter zusammenhängender Block gleicher Zeichen im String Java Basics - Anfänger-Themen 1
XWing Randomizer mit einem String Java Basics - Anfänger-Themen 2
D 2D Char Array into String Java Basics - Anfänger-Themen 2
H Cast von Float nach String klappt nicht Java Basics - Anfänger-Themen 12
I Zerlegen von String Java Basics - Anfänger-Themen 3
B Beliebiger String gegeben Suche Datum in String Java Basics - Anfänger-Themen 6
I String Java Basics - Anfänger-Themen 4
H Zu langen String aufteilen - bequeme Methode? Java Basics - Anfänger-Themen 14
W String einer Textdatei in einzelne Stringobjekte pro Zeile aufteilen Java Basics - Anfänger-Themen 14
belana wie am besten 2D Array von String to Integer Java Basics - Anfänger-Themen 18
J Java To String Methode, Array mit For-Schleife Java Basics - Anfänger-Themen 2
M Kommandozeilenparamter als EINEN String werten Java Basics - Anfänger-Themen 5
M RandomAccessFile int und String gleichzeitig in einer Datei Java Basics - Anfänger-Themen 49
M Prüfen on eine Zahl im String enthalten ist Java Basics - Anfänger-Themen 3
Distanz zwischen zwei Zeichenfolgen in einem String bestimmen Java Basics - Anfänger-Themen 5
Substring in einem String finden Java Basics - Anfänger-Themen 13
BeginnerJava String mit vorgegebener Länge und Buchstaben erzeugen/ mit Leerstellen Java Basics - Anfänger-Themen 8
I Eindeutiger String mit maximaler Anzahl an Zeichen Java Basics - Anfänger-Themen 11
H Interface Wieso "List<String> list = new ArrayList<>[…]" Java Basics - Anfänger-Themen 4
JavaBeginner22 Integer in String umwandeln Java Basics - Anfänger-Themen 7
Fodoboo131 RegEx- Umwandlung von String in ausführbares Objekt/ Befehl Java Basics - Anfänger-Themen 9
HolyFUT Input/Output Leerzeichen aus String entfernen - klappt nicht! Java Basics - Anfänger-Themen 13
viktor1 Methoden Methode schreiben static void readText (String filename) {...} zu WordHistogramSample.java Java Basics - Anfänger-Themen 13
ravenz Schleife mit for über String Array „zahlen“und prüfen ob Wert „a“ oder „b“ oder „c“ entspricht (mittels || ) Java Basics - Anfänger-Themen 4
G Position einer unbekannten 3-stelligen-Zahl in einem String finden Java Basics - Anfänger-Themen 15
T String Array Fehler beim Index Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben