Кроме того, это не так легко достичь с помощью регулярных выражений. В целях безопасности это должно быть гарантированное решение, которое не подвержено странным крайним случаям, и этот тип экранирования должен выполняться только для определенного поля в объекте JSON.

спользовании JSON-libJSONObjectкак я могу остановитьput метод хранения строки, которая содержит JSON как JSON, а не как экранированную строку?

Например:

JSONObject obj = new JSONObject();
obj.put("jsonStringValue","{\"hello\":\"world\"}");
obj.put("naturalStringValue", "\"hello world\"");
System.out.println(obj.toString());
System.out.println(obj.getString("jsonStringValue"));
System.out.println(obj.getString("naturalStringValue"));

печатает:

{"jsonStringValue":{"hello":"world"},"naturalStringValue":"\"hello world\""}
{"hello":"world"}
"hello world"

и я хочу это напечатать:

{"jsonStringValue":"{\"hello\":\"world\"}","naturalStringValue":"\"hello world\""}
{"hello":"world"}
"hello world"

Да, я понимаю, что это неприятно. Однако это поддерживает конвейер сериализации JSON, для которого, для обеспечения взаимодействия, это ожидаемое поведение. В некоторых случаях мы будем сериализовать пользовательский ввод, который может содержать / содержать действительный JSON. Мы бы не хотели, чтобы пользовательский ввод стал частью объекта JSON, с которым мы сериализуем указанный вход.

Ручное экранирование не работает, потому что это заставляет JSON-lib экранировать\ персонажи:

JSONObject obj = new JSONObject();
obj.put("naturalJSONValue","{\"hello\":\"world\"}");
obj.put("escapedJSONValue", "{\\\"hello\\\":\\\"world\\\"}");
System.out.println(obj.toString());
System.out.println(obj.getString("naturalJSONValue"));
System.out.println(obj.getString("escapedJSONValue"));

Выход:

{"naturalJSONValue":{"hello":"world"},"escapedJSONValue":"{\\\"hello\\\":\\\"world\\\"}"}
{"hello":"world"}
{\"hello\":\"world\"}

На этом этапе любые обходные пути для ручного выборочного экранирования сложного объекта JSON в первую очередь сводят на нет значение использования JSON-lib.

Также я понимаю, что этот вопрос был задандоНо, к сожалению, я не могу принять его ответ так легко. JSON-lib является широко используемой зависимостью во многих областях моего проекта, и замена ее была бы большой задачей. Мне нужно быть абсолютно уверенным, что с помощью JSON-lib невозможно достичь этой цели, прежде чем я смогу осуществить обмен на Джексона, Simple-JSON или Gson.

Ответы на вопрос(2)

Ваш ответ на вопрос