Невозможно преобразовать строку в JSON, используя Java - PullRequest
0 голосов
/ 19 апреля 2019

Я получаю json от вызова rest как {"d1": 1, "d2": 1, "d3": 0, "d4": 1}, который хранится в db как - {d1 = 1, d2= 1, d3 = 0, d4 = 1}.

Когда я читаю из базы данных, я получаю вышеуказанное в виде строки как - {d1 = 1, d2 = 1, d3 = 0, d4 = 1}.Я хочу преобразовать это в исходную форму, как и раньше, как - {"d1": 1, "d2": 1, "d3": 0, "d4": 1}, упомянутые выше.

Как я могудостичь этого в Java.есть ли какая-либо библиотека json для этого?

Софар Я пробовал это, но это не сработало -

JSONParser parser = new JSONParser ();JSONObject json = (JSONObject) parser.parse (jsonString);

Я хочу поместить этот json в ResponseEntity>.

Даже я пытался -

jsonString = jsonString.replaceAllзнак равноJSONObject jsonObject = new JSONObject (jsonString);

Строка finalJsonString = jsonObject.toString ();

Это возвращает ответ как "{\" d1 \ ": 1, \" d2 \": 1, \" d3 \ ": 0, \" d4 \ ": 1}" с двойными кавычками в начале и заканчиваться обратной косой чертой перед двойными кавычками для ключей.

Ответы [ 3 ]

0 голосов
/ 19 апреля 2019

Строка, которую вы извлекаете из БД, представляет собой структуру данных Map. Таким образом, вы можете преобразовать карту в JSON следующим образом:

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

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

Отредактировано

Следующий фрагмент кода предоставит вам полный ответ JSON.

@RestController
@RequestMapping("/api/v1/")
public class TestController {

@GetMapping(value="test",produces=MediaType.APPLICATION_JSON_VALUE) 
    public ResponseEntity<String> test() {

        Map<String,String> payload = new HashMap<>();
        payload.put("d1","value1");
        payload.put("d2","value2");
        payload.put("d3","value3");
        payload.put("d4","value4");
        String json =null;
        try {
             json= new ObjectMapper().writeValueAsString(payload);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }       
        return new ResponseEntity(json,HttpStatus.OK);
    }
}

Тест почтальона: Postman Test

0 голосов
/ 01 мая 2019

Вы можете сделать следующее:

ObjectMapper mapper = new ObjectMapper();
            try {
                MyResponse result = mapper.readValue(e.getResponseBodyAsString(),MyResponse.class);
                return result;
            } catch (IOException e1) {
                e1.printStackTrace();
            }
0 голосов
/ 19 апреля 2019

Строка, возвращаемая через DB, не в формате JSON, поэтому синтаксический анализ не выполняется.

Вы можете использовать следующий подход, чтобы отформатировать возвращенную строку в строку JSON, а затем проанализировать ее.Я использовал Гуава Splitter.MapSplitter :

        String in = "{d1=1,d2=1,d3=0,d4=1}";
        in = in.replaceAll("[{}]", "");
        Map<String, String> properties = Splitter.on(",").withKeyValueSeparator("=").split(in);
        JSONObject obj = new JSONObject(properties);
        String formattedString = obj.toString();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...