2010-07-19 3 views
1

일부 값이 JSON으로 유지되는 ".properties"파일이 있습니다. 비록 org.json.JSONObject가 특수 문자로 인해 계속 괴롭힘을 당하고있다. 그래서 나는 {"key":"this is a \"Value\""}이라고 썼지 만, {"key":"this is a "Value""}이라고 읽었다. 분명히 후자는 JSON 구문 분석기에 적합하게 할 것입니다. 시행 착오로 그것을 찌르는 것이 아니라 right 값을 이스케이프하는 방법 (이 경우 전체 JSON 문자열 ...)을 PropertiesConfiguration 클래스에 전달하기 전에 파일에 쓰여졌습니까?문자열을 Apache Commons PropertiesConfiguration에 쓰기 전에 이스케이프하는 올바른 방법은 무엇입니까?

답변

0

연결이 끊어졌습니다. 나는 우리가 사용자가 문자열 This is "Interesting"...을 공급 상상, 이제

PropertiesConfiguration pc = new PropertiesConfiguration(); 
pc.addProperty("SomeKey", 
    new JSONObject().put("Stuff", getUserInput()).toString()); 
pc.save(myWriter); 

의 라인을 따라 뭔가를했다 생각했다. 문자열이 제대로 탈출 따옴표와 함께 저장됩니다 동안 속성 물론 끔찍하게 깨진

SomeKey={\"SomeKey\":\"This is \"Interesting\"\"} 

와 바람합니다 파일 때문에 내 문제는 온다. 여기 그것이 왜 일어 났는지 (나는 생각한다). 대신 속성을 만들 수 위의 이상적인 코드와 같이 파일로 PropertiesConfiguration 클래스를 사용하는 원래의 코드는 더에만 JSON에 대한 사용자 입력을 탈출 물론

myWriter.write(keyName + "=" + 
    new JSONObject().put("Stuff", getUserInput()).toString()); 

처럼,하지만 더 JSON을 탈출하지 않습니다 특성 파서의 경우 나는 추가 테스트없이 그것을 맹세 할 수는 없지만, 필요하다면 pc.AddProperty() 메서드는 (다시) 인수를 벗어날 것입니다.

최종 결과 : 내가 작업하고있는 코드를 작성한 사람이 "가짜"가 아닌 필수 형식을 직접 작성하려고하는 대신 제공된 API를 사용하고 있다고 가정했기 때문입니다.

0

속성 파일에서 백 슬래시가 무시됩니다. 이런 유니 코드 인코딩을 사용해야합니다.

"this is a \u005c"Value\u005c"" 
+0

처음에는 속성 파일에 기록 될 값을 생성하는 JSONObject.toString()의 출력을 거의 제어 할 수 없습니다. 나는 이것을 명확하게하기 위해 질문을 갱신 할 것이다. – Coderer

관련 문제