2014-07-06 5 views
0

나는 어떻게 할 것인지 알고 싶습니다.자바 직렬화/비 직렬화에 대한 안전한 json

Java 데이터 객체가 있습니다. 이 개체는 개체 특성을 포함하는 개체 특성이 포함되어 있습니다 ...

json-io을 사용하여 개체를 serialize합니다. 하지만 deserializing 할 때 개체를 deserialize하지 못하면 데이터를 보호하려고합니다. 그래서 모든 객체를 직렬화하기 전에 각 속성을 json-serialize하는 아이디어가 있습니다. 이 방법은 속성이 deserialize에 실패 할 경우 객체 자체가 안전합니다.

이 나는 ​​물체 {a:v1,b:{ba:v2,bb:{bba:v3,bbb:v4}}}이있는 경우, 나는이 대신 같은 직렬화된다는 것을 의미합니다 : "{\"a\":\"v1\",\"b\":\"{\\\"ba\\\":\\\"v2\\\",\\\"bb\\\":\\\"{\\\\\\\"bba\\\\\\\":\\\\\\\"v3\\\\\\\",\\\\\\\"bbb\\\\\\\":\\\\\\\"v4\\\\\\\"}\\\"}\"}"

당신은 그것을 읽고 매우 불안하게하는 매우 간단한 객체에 그를 참조하십시오. 더 복잡한 것을 상상해보십시오!

그것에 대해 뭔가하고 싶습니다.하지만 좋은 아이디어는 없습니다. 어쩌면 내가 읽거나 json을 호출하여 함수가 필요할 때 "\"를 제거하고 다시 호출 할 수 있지만 올바른 알고리즘을 찾는 데 성공하지 못하는 것일 수 있습니다. 힌트가 있습니까? 아니면 다른 방법일까요?

고맙습니다.

+0

혼란스러운. 어떻게 실패 할까? JSON 입력을'InputStream'으로 받고 있습니까? 또한 JSON-IO의 팬이 아닙니다. REST 서비스를 작성하는 경우 Jackson 또는 Gson IMO를 기본값으로 사용해야합니다. – Ryan

+0

내 앱의 데이터를 직렬화하는 데 사용합니다. 그것이 파워 포인트의 사본이라고 생각하십시오. json-io가 필드를 복원하려고 할 때 내 앱에 버그가 있으면 실패 할 수 있습니다. 이 경우 전체 json 파일을 낭비 할 수 있습니다. 나는 그것을 피하기 위해이 속임수를 사용합니다. 버그가있는 경우 해당 부분 만 손실됩니다. – Sharcoux

+0

이 모델이 적합합니까? 아니면 일반적인 것으로 작성하고 있습니까? 전자의 경우 이것은 비교적 쉬운 문제입니다. 여러분이해야 할 일은 상기 클래스에 대한 독자적인 커스텀 시리얼 라이저/디시리얼라이저를 작성하는 것입니다. JSON이 그 못생긴 모습을 보여야합니다. BTW ... 라이브러리 전환을 진지하게 고려하십시오. JSON-IO는 유지 보수되지 않았고 내가 언급 한 다른 라이브러리와 거의 비슷하거나 효율적이지 않다. – Ryan

답변

0

확인. 내 접근 방식이 잘못되었습니다. Data 또는 String을 포함하는 Map과 같은 Data 객체를 만들었습니다. 그런 다음 데이터 요소를 안전하게 deserialize 할 수 있습니다. 이것은 모든 트렁크가 안전한 데이터 객체이고, 오직 leafs만이 json으로 직렬화 된 일반 객체 인 트리가 있음을 의미합니다. 내 앞의 예에서

public class Data implements Serializable { 
    private final Map<String, Data> node = new HashMap<>();//safe tree object 

    private final Map<String, String> leafs = new HashMap<>();//unsafe serialized object 
} 

는, 결과는 다음과 같습니다

//initial object 
{a:v1,b:{ba:v2,bb:{bba:v3,bbb:v4}}} 
//becomes 
{"a":"{v1}","b":{"ba":"{v2}","bb":{"bba":"{v3}","bbb":"{v4}"}}} 

그리고 \는 안전하지 않은 값 중 하나가 문자열을 포함하는 경우에만 나타납니다.

감사합니다. Ryan, 항상 해결책을 찾기위한 첫 걸음 인 문제를 정의하는 데 많은 도움을주었습니다.

관련 문제