Мне нужно отправить минимизированный JSON в службу отдыха, это казалось нормальным, однако при печати моего JSON в файл появляются несколько косых черт "/", отделяющих поля от файла, поскольку я новичок в этом типе реализации, я был смущенный ...
По сути, я добавляю объекты в список и в конце конвертирую общий список в Json, это мой метод, который преобразует объект List в JSON.
public String convertListToJson(List obj) throws IOException {
String jsonInString = null;
ObjectMapper mapper = new ObjectMapper();
mapper.setDefaultPropertyInclusion(JsonInclude.Include.ALWAYS);
mapper.configure(SerializationFeature.USE_EQUALITY_FOR_OBJECT_ID, true);
jsonInString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj);
JsonNode jsonNode = mapper.readValue(jsonInString, JsonNode.class);
String json = jsonNode.toString();
return json;
}
String payload = convertListToJson(object);
System.out.println(payload);
Это результат печати на консоли
[{"id":12,"nomePeriodo":"2012","inicio":"2012-01-01T02:00:00Z","fim":"2012-12-31T02:00:00Z"},{"id":13,"nomePeriodo":"2013","inicio":"2013-01-01T02:00:00Z","fim":"2013-12-31T02:00:00Z"},{"id":14,"nomePeriodo":"2014","inicio":"2014-01-01T02:00:00Z","fim":"2014-12-31T02:00:00Z"},{"id":15,"nomePeriodo":"2015","inicio":"2015-01-01T02:00:00Z","fim":"2015-12-31T02:00:00Z"},{"id":16,"nomePeriodo":"2016","inicio":"2016-01-01T02:00:00Z","fim":"2016-12-31T02:00:00Z"},{"id":17,"nomePeriodo":"2017","inicio":"2017-01-01T02:00:00Z","fim":"2017-12-31T02:00:00Z"},{"id":18,"nomePeriodo":"2018","inicio":"2018-01-01T02:00:00Z","fim":"2018-12-31T02:00:00Z"}]
Это метод, который я использую для печати в файл.
printJson(payload);
private void printJson(String payload) {
ObjectMapper mapper = new ObjectMapper();
try {
mapper.writeValue(new File("c:\\server\\JSON.json"), payload);
} catch (IOException e) {
e.printStackTrace();
}
}
Когда я печатаю в файл, вот результат:
"[{\"id\":12,\"nomePeriodo\":\"2012\",\"inicio\":\"2012-01-01T02:00:00Z\",\"fim\":\"2012-12-31T02:00:00Z\"},{\"id\":13,\"nomePeriodo\":\"2013\",\"inicio\":\"2013-01-01T02:00:00Z\",\"fim\":\"2013-12-31T02:00:00Z\"},{\"id\":14,\"nomePeriodo\":\"2014\",\"inicio\":\"2014-01-01T02:00:00Z\",\"fim\":\"2014-12-31T02:00:00Z\"},{\"id\":15,\"nomePeriodo\":\"2015\",\"inicio\":\"2015-01-01T02:00:00Z\",\"fim\":\"2015-12-31T02:00:00Z\"},{\"id\":16,\"nomePeriodo\":\"2016\",\"inicio\":\"2016-01-01T02:00:00Z\",\"fim\":\"2016-12-31T02:00:00Z\"},{\"id\":17,\"nomePeriodo\":\"2017\",\"inicio\":\"2017-01-01T02:00:00Z\",\"fim\":\"2017-12-31T02:00:00Z\"},{\"id\":18,\"nomePeriodo\":\"2018\",\"inicio\":\"2018-01-01T02:00:00Z\",\"fim\":\"2018-12-31T02:00:00Z\"}]"
Итак, у вас есть эти \ бары, разделяющие элементы в json ... Я что-то делаю не так или это обычное дело? Если возможно, я бы хотел удалить их из своего архива
@JonSkeet Truth! Я делаю это снова! Спасибо
Эти полосы называются обратными косыми чертами и используются для выделения специальных символов, таких как двойные кавычки ("
). Джон уже намекнул, почему, то есть вы позволяете ObjectMapper записывать строку в файл, и, таким образом, он будет обрабатывать всю строку как значение один Json и будет экранировать все двойные кавычки в строке на \"
(в большинстве случаев требуется экранирование если текстовые значения содержат кавычки или двойные кавычки, например "fullName":"Thomas \"Tom\" Whoever"
).
Почему вы снова используете ObjectMapper при записи в файл? Вы уже преобразовали свою полезную нагрузку в строку - разве вы не хотите просто записать эту строку прямо в файл?