Konvertieren von json-string ohne Anführungszeichen, in eine Karte

Ich habe einen string im Json-format, nur keine Schlüssel oder Werte, werden diese von Anführungsstrichen umgeben sind. Ich habe zum Beispiel diese:

String json = "{name: Bob, state: Colorado, Friends: [{ name: Dan, age: 23 }, {name: Zane, age: 24 }]}"

Möchte ich diese zu einer Karte, die sieht so aus:

Map<String, Object> friend1Map = new HashMap<>();
friend1Map.put("name", "Dan");
friend1Map.put("age", 23);

Map<String, Object> friend2Map = new Hashmap<>();
friend2Map.put("name", "Zane");
friend2Map.put("age", 24);

Map<String, Object> newMap = new HashMap<>();
newMap.put("name", "Bob");
newMap.put("state", "Colorado");
newMap.put("Friends", Arrays.asList(friend1Map, friend2Map));

Ich habe versucht, die folgenden zwei Methoden:

ObjectMapper mapper = new ObjectMapper();
mapper.readValue(json, new TypeReference<Map<String, Object>>() {});

Dieser wirft einen Fehler, nämlich:

Unexpected character ('n'): was expecting double-quote to start field name

Dann habe ich versucht, die änderung der config-mapper:

mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
mapper.readValue(json, new TypeReference<Map<String, Object>>() {});

Aber das warf eine Fehlermeldung angezeigt:

com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'Bob': was expecting ('true', 'false' or 'null')
at [Source: {name: Bob, state: Colorado, Friends: [{ name: Dan, age: 23 }, {name: Zane, age: 24 }]}; line: 1, column: 11]

Gibt es eine Möglichkeit, diese Karte, wenn Zitate nicht enthalten sind in den json-string?

  • Ihre Json-String ungültig ist, testen Sie es hier : jsonlint.com
  • wie so? und anscheinend ist dieser Kommentar muss 15 Zeichen, um es hinzuzufügen
  • oder vielmehr, wie würde ich es machen gültig? Klar, das Problem ist nicht die Anführungszeichen. Würde ich tun einige böse teilt?
  • Nur um klar zu sein: das ist kein Json, nur Json-like. Ich glaube nicht, dass jackson verarbeiten kann unquoted String-Werte, nur nicht quotierten Schlüssel werden unterstützt. Diese Antwort könnte dir helfen: stackoverflow.com/a/34794445/5108418
  • Vielleicht schauen Sie in der GSON-Bibliothek lieber als Jackson. Siehe stackoverflow.com/questions/20557131/gson-parse-unquoted-value
  • dang. Gut, nach der Inspektion, wird der String durch ein mapper.writeValueAsString(Karte). Die Karte ist im wesentlichen die, die ich bin mit dem Ziel zu erhalten. Also, dieses problem zu umgehen, ich sollte in der Lage sein zu ersetzen, die writeValueAsString mit etwas, das die Flucht der Zitate im inneren der Karte schreiben, wenn es als string. Gibt es eine Möglichkeit, das zu tun?

InformationsquelleAutor user2869231 | 2016-04-12
Schreibe einen Kommentar