¿Cómo forzar a JSONObject.put (..) de JSON-lib a escapar de una cadena que contiene JSON?

Cuando use JSON-lib'sJSONObject, ¿cómo puedo detener elput método para almacenar una cadena que contiene JSON como JSON en lugar de como una cadena escapada?

Por ejemplo

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"));

huellas dactilares

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

y quiero que se imprima:

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

Sí, me doy cuenta de que esto es desagradable. Sin embargo, esto es compatible con una canalización de serialización JSON para la cual, por el bien de la interoperabilidad, este es el comportamiento esperado. Hay casos en los que estaríamos serializando la entrada del usuario que puede ser / contener un JSON válido. No queremos que la entrada del usuario se convierta en una parte del objeto JSON al que estamos serializando dicha entrada.

l escape manual no funciona porque hace que JSON-lib escape del\ caracteres

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"));

Salida

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

n este punto, cualquier solución alternativa para permitir el escape selectivo manual de un objeto JSON complejo negaría por completo el valor de usar JSON-lib en primer lugar.

Además, entiendo que esta pregunta se ha hechoantes d, pero desafortunadamente no puedo aceptar su respuesta tan fácilmente. JSON-lib es una dependencia muy utilizada en muchas áreas de mi proyecto y cambiarla sería una gran empresa. Tengo que estar absolutamente seguro de que no hay forma de lograr este objetivo con JSON-lib antes de poder intercambiar a Jackson, simple-json o Gson.

Respuestas a la pregunta(2)

Su respuesta a la pregunta