2017-06-21 10 views
2

Ich habe eine JSON, die geschweifte Klammer als Wert in einem der Zeichenfolge Feld enthält. Wir verwenden fasterxml.jackson api, um den json zu analysieren und Fehler zu erzeugen.Json Analyse Ausnahme, wenn JSON enthält "}"

JSON:

{ 
    "Message": { 
     "header": { 
      "correlationId": "c17da531-bf04-4cbf-9497-631353f9e8c5" 
     }, 
     "body": { 
      "log": { 
       "id": "a8e5b716-1bc0-4829-bc47-1d28b4ff8920", 
       "type": "}test" 
      } 
     } 
    } 
} 

Fehler "Unerwarteter End-of-Eingang: erwartete Schließung Angebot für einen String-Wert"

Wie kann ich auch weiterhin das Parsen, wenn gibt es} als Wert?

Antwort

0

Sie müssen Ihre JSON-Zeichenfolge so umwandeln, dass sie Escape-Zeichen enthält.

Mein Arbeitsbeispiel

String json = "{\n" + 
       " \"Message\": {\n" + 
       "  \"header\": {\n" + 
       "   \"correlationId\": \"c17da531-bf04-4cbf-9497-631353f9e8c5\"\n" + 
       "  },\n" + 
       "  \"body\": {\n" + 
       "   \"log\": {\n" + 
       "    \"id\": \"a8e5b716-1bc0-4829-bc47-1d28b4ff8920\",\n" + 
       "    \"type\": \"}test\"\n" + 
       "   }\n" + 
       "  }\n" + 
       " }\n" + 
       "}"; 

     JsonFactory factory = new JsonFactory(); 

     ObjectMapper mapper = new ObjectMapper(factory); 
     JsonNode rootNode = mapper.readTree(json); 

     Iterator<Map.Entry<String,JsonNode>> fieldsIterator = rootNode.fields(); 
     while (fieldsIterator.hasNext()) { 

      Map.Entry<String,JsonNode> field = fieldsIterator.next(); 
      System.out.println("Key: " + field.getKey() + "\tValue:" + field.getValue()); 
     } 
0

Sie müssen die } von Ihrem json Daten entkommen. wie \}. Aber wenn es der Fall ist, dass Sie den JSON nicht ändern können (vielleicht bekommen Sie es von einer API), können Sie den JSON-String vor dem Parsen einfach vorverarbeiten. wie

  • Sie können dann einfach ersetzen die Group 1. Spiel aus dem String regex für dieses "\.*(\}).*"
  • verwenden.