Лучший способ жестко закодировать данные 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);
Другие вопросы по тегам