2015-03-30 9 views
20

Wie kann ich eine Map mit Jackson in ein gültiges JSON konvertieren?Karte nach JSON konvertieren mit Jackson

ich es tue Methode mit Googles Gson über eine Feder-Boot-REST Beitrag ...

Hier ist die RESTful Web Service:

import java.util.Map; 

import org.springframework.web.bind.annotation.RequestBody; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.bind.annotation.RestController; 

import com.fasterxml.jackson.core.JsonFactory; 
import com.fasterxml.jackson.core.JsonParser; 
import com.google.gson.Gson; 

@RestController 
@RequestMapping("/myservice") 
public class ValidationService {  

    @RequestMapping(value="/validate", method = RequestMethod.POST) 
    public void validate(@RequestBody Map<String, Object> payload) throws Exception { 
     Gson gson = new Gson(); 
     String json = gson.toJson(payload); 
     System.out.println(json); 
    } 
} 

Also, wenn ich es auf diese berufen mit:

curl -H "Accept: application/json" -H "Content-type: application/json" \ 
-X POST -d '{"name":"value"}' http://localhost:8080/myservice/validate 

der Receive stdout folgende (das ist genau das, was ich will):

{"name":"value"} 

Gibt es einen besseren Weg, dies mit Jackson anstelle von Googles Gson zu tun und/oder mache ich das Ganze falsch?

+0

möglich Duplikat [Jackson Vs. Gson] (http://stackoverflow.com/questions/2378402/jackson-vs-gson) –

+3

Neeraj Jain, Danke für den Kommentar aber: Jackson vs Gson ist über die positiven und negativen Aussagen von Jackson vs Gson. Dieser Beitrag ist eine spezifische Frage. –

Antwort

48

Sie Map-JSON mit Jackson umwandeln können wie folgt dar:

Map<String,String> payload = new HashMap<>(); 
payload.put("key1","value1"); 
payload.put("key2","value2"); 

String json = new ObjectMapper().writeValueAsString(payload); 
System.out.println(json); 
+0

Dies ist Map to String, nicht JSON. Es wird einen weiteren Schritt zum Konvertieren der Ausgabezeichenfolge in den JSON-Typ geben. –

+0

@NayanWadekar das funktioniert tatsächlich, ich denke, Sie sind falsch oder vielleicht möchten Sie einen Einblick geben? –

+0

@BrunoBossola Tut mir leid, ich habe über das eigentliche JSON-Objekt nachgedacht, habe die Ausgabe nicht gesehen, für die JSON-String-Darstellung ist das korrekt. –

0

Wenn Sie jackson verwenden, besser zu konvertieren direkt an ObjectNode.

//not including SerializationFeatures for brevity 
static final ObjectMapper mapper = new ObjectMapper(); 

//pass it your payload 
public static ObjectNode convObjToONode(Object o) { 
    StringWriter stringify = new StringWriter(); 
    ObjectNode objToONode = null; 

    try { 
     mapper.writeValue(stringify, o); 
     objToONode = (ObjectNode) mapper.readTree(stringify.toString()); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    System.out.println(objToONode); 
    return objToONode; 
} 
1

Mit jackson, können Sie es wie folgt:

ObjectMapper mapper = new ObjectMapper(); 
    String clientFilterJson = ""; 
    try { 
     clientFilterJson = mapper.writeValueAsString(filterSaveModel); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
Verwandte Themen