Convertir la chaîne json sans les guillemets dans une carte

J'ai une chaîne qui est au format Json, seulement aucun des clés ou des valeurs qui sont entourés par des guillemets. Par exemple, j'ai ceci:

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

Je veux que cela devienne une carte qui ressemble à ceci:

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

J'ai essayé les deux méthodes suivantes:

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

Cela provoquera une erreur, en disant:

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

Puis j'ai essayé de changer la config de mapper:

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

Mais cela a jeté une erreur en disant:

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]

Est-il un moyen d'obtenir cette Carte, lorsque les guillemets ne sont pas inclus dans la chaîne json?

  • Votre Chaîne Json n'est pas valide, le tester ici : jsonlint.com
  • comment alors? et apparemment ce commentaire besoins de 15 caractères pour l'ajouter
  • ou plutôt, comment pourrais-je faire est-il valide? Clairement, la question est de ne pas avoir le devis. Aurais-je à faire de méchants divise?
  • Juste pour être clair: ce n'est pas Json, juste Json comme. Je ne pense pas que jackson peut gérer non cotées sring valeurs, seulement non cotées clés sont prises en charge. Cette réponse pourrait vous aider: stackoverflow.com/a/34794445/5108418
  • Vous devriez regarder dans le GSON de la bibliothèque plutôt que de Jackson. Voir stackoverflow.com/questions/20557131/gson-parse-unquoted-value
  • dang. Eh bien, après inspection, la Chaîne vient de l'utilisation d'un mappeur.writeValueAsString(map). Cette carte est essentiellement celui que je suis en visant à obtenir. Afin de contourner ce problème, je devrais être en mesure de remplacer le writeValueAsString avec quelque chose qui va s'échapper les guillemets à l'intérieur de la carte lors de l'écriture comme une chaîne de caractères. Est-il un moyen de le faire?

InformationsquelleAutor user2869231 | 2016-04-12