Java 什么';在将字符串写入Apache Commons属性配置之前,对其进行转义的正确方法是什么?

Java 什么';在将字符串写入Apache Commons属性配置之前,对其进行转义的正确方法是什么?,java,apache,json,properties,Java,Apache,Json,Properties,我们有一个“.properties”文件,其中一些值作为JSON保存。但是,我一直被特殊的字符咬着——org.json.JSONObject并没有详细说明是什么导致它窒息,所以我花了很长时间才发现我写了{“key”:“这是一个\“Value\”},但我读了{“key”:“这是一个值”}。显然,后者将使JSON解析器适合。在将值传递给PropertiesConfiguration类以写入文件之前,谁能告诉我转义该值(在本例中,它当然是整个JSON字符串…)的正确方法,而不是通过尝试和错误来戳它呢?

我们有一个“.properties”文件,其中一些值作为JSON保存。但是,我一直被特殊的字符咬着——org.json.JSONObject并没有详细说明是什么导致它窒息,所以我花了很长时间才发现我写了
{“key”:“这是一个\“Value\”}
,但我读了
{“key”:“这是一个值”}
。显然,后者将使JSON解析器适合。在将值传递给PropertiesConfiguration类以写入文件之前,谁能告诉我转义该值(在本例中,它当然是整个JSON字符串…)的正确方法,而不是通过尝试和错误来戳它呢?

在属性文件中忽略反斜杠。您需要像这样使用Unicode编码

  "this is a \u005c"Value\u005c""

我想我可能找到了脱节的地方。我以为我们有一些类似于

PropertiesConfiguration pc = new PropertiesConfiguration();
pc.addProperty("SomeKey",
  new JSONObject().put("Stuff", getUserInput()).toString());
pc.save(myWriter);
现在,假设用户提供字符串
,这是“有趣的”…
。我的问题是,虽然字符串将以正确转义的引号存储,但属性文件将以

SomeKey={\"SomeKey\":\"This is \"Interesting\"\"}
当然坏得很厉害。这就是为什么会发生(我想)。与上面理想的代码中使用PropertiesConfiguration类创建属性文件不同,原始代码更像

myWriter.write(keyName + "=" +
  new JSONObject().put("Stuff", getUserInput()).toString());
这当然只会转义JSON的用户输入,但不会进一步转义属性解析器的JSON。如果没有额外的测试,我不能保证,但是如果需要的话,
pc.AddProperty()
方法将(再次)转义它的参数


最终结果:我认为编写我正在编写的代码的人使用的是提供给他的API,而不是“流氓”并试图直接创建所需的格式,这是我的错。

我对JSONObject.toString()的输出几乎没有控制权,它首先生成要写入属性文件的值。我会更新这个问题,让它更清楚。