web-dev-qa-db-fra.com

Configurer Jackson pour désérialiser un JSON entre guillemets simples (non valide)

Je suis un débutant à utiliser la bibliothèque Jackson.

J'essaie de faire ceci [voir ci-dessous], et cela jette une erreur.

String x="{'candidateId':'k','candEducationId':1,'activitiesSocieties':'Activities for cand1'}";
ObjectMapper mapper = new ObjectMapper();

try {
    JsonNode df=mapper.readValue(x,JsonNode.class);
    int i=0;
} catch .....

Exception:

org.codehaus.jackson.JsonParseException: Unexpected character (''' (code 39)): was expecting double-quote to start field name
at [Source: Java.io.StringReader@1afd1810; line: 1, column: 3]
  at org.codehaus.jackson.JsonParser._constructError(JsonParser.Java:1291)

Bien que la même chose fonctionne si je remplace la citation simple (') par une citation double (").

28
Pipalayan Nayak

JSON n'est pas valide, mais vous pouvez dire à Jackson de l'autoriser. Voici comment.

String x = "{'candidateId':'k','candEducationId':1,'activitiesSocieties':'Activities for cand1'}";
ObjectMapper mapper = new ObjectMapper();
mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
JsonNode df = mapper.readValue(x, JsonNode.class);
System.out.println(df.toString());
// output: {"candidateId":"k","candEducationId":1,"activitiesSocieties":"Activities for cand1"}
58
Programmer Bruce

Les chaînes en JSON ne peuvent être spécifiées qu'avec des guillemets doubles ("), non guillemets simples ('), c'est la raison de votre erreur; utilisez des guillemets doubles.

Voici le diagramme de canalisation qui spécifie les chaînes JSON valides (notez qu'elles ne peuvent être encapsulées qu'avec des guillemets doubles!)

Diagramme de tuyaux JSON Strings valide http://www.json.org/string.gif

(Voir json.org pour une description complète de JSON.)

16
Mark Elliot

Voici comment cela fonctionne dans mon cas: 

var jsonString ='{"it":"Stati Uniti d'America"}';
jsonString =jsonString.replace("'", "\\\\u0027");
1
user2918934