Лучший способ жестко закодировать данные JSON как String в Java
Мне нужно сохранить данные JSON в моем коде для модульных тестов в виде строки. Например,
{
"one": 1,
"two": 2
}
Я знаю, что могу прочитать эти данные из файла или из свойства, но мне нужно сохранить их в виде строки. В настоящее время у меня есть что-то вроде этого:
String s = "{\n" +
" \"one\": 1,\n" +
" \"two\": 2\n" +
"}";
Но это выглядит некрасиво, а в более сложных данных его трудно читать и изменять.
я могу избавиться от\n
потому что они на самом деле не нужны, а для красивого просмотра этих данных позже:
String s = "{" +
" \"one\": 1," +
" \"two\": 2" +
"}";
Также я могу использовать трюк с заменой кавычек:
String s = ("{\n" +
" 'one': 1,\n" +
" 'two': 2\n" +
"}").replace('\'','"');
Или совместить оба дела сразу.
Есть ли лучший способ представить данные JSON в видеString
на Яве?
Например, в Python есть тройные кавычки:
s = """
{
"one": 1,
"two": 2
}
"""
1 ответ
Текстовые блоки — Java 15+
Если вы используете Java 15 или более позднюю версию для представления данных JSON вместо конкатенации строк, которая утомительна и подвержена ошибкам из-за необходимости избегать каждой кавычки, вы можете использовать текстовые блоки .
Чтобы создать текстовый блок , вам нужно заключить многострочный текст в тройные двойные кавычки.
String myJSON = """ // no characters should appear after the opening delimiter - the text starts from the next line
{
"one": 1,
"two": 2
}""";
Как и обычные строки, текстовые блоки поддерживают escape-последовательности, но вам не нужно экранировать кавычки внутри текстового блока .
И обратите внимание, что открывающий разделитель"""
сразу же должно следовать завершение строки, как в примере, показанном выше.
Альтернативы
Если ваш проект находится на версии Java, которая не поддерживает текстовые блоки , но вы не хотите набирать номер с конкатенацией строк, вы можете поместить свой JSON в текстовый файл , а затем прочитать его построчно.
С Java 11 вы можете прочитать все содержимое файла в строку с помощью одной строки кода, используяFiles.readString()
:
String myJSON = Files.readString(path);