Vraag Converteer Map naar JSON met Jackson


Hoe kan ik een kaart converteren naar een geldige JSON met behulp van Jackson?

Ik doe het met Google's GSON via een Spring Boot REST Post-methode ...

Hier is de 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);
    }
}

Dus als ik het gebruik met het volgende:

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

Ontvang het volgende op stdout (dit is precies wat ik wil):

{"name":"value"}

Is er een betere manier om dit te doen met Jackson in plaats van Google's Gson en / of ga ik er helemaal verkeerd mee om?


22
2018-03-30 07:18


oorsprong


antwoorden:


Je kunt converteren Map naar JSON Jackson als volgt gebruiken:

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

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

60
2018-03-30 07:37



U zou in plaats daarvan de voorkeur moeten geven aan Object Mapper. Hier is de link voor hetzelfde: Object Mapper - Spring MVC-manier van Obect tegen JSON


1
2018-03-30 07:26



Met jackson kun je het als volgt doen:

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

1
2018-05-31 07:55



Als je jackson gebruikt, kun je beter direct naar ObjectNode converteren.

//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;
}

0
2018-03-31 08:36