티스토리 뷰

Apps/기타등등

Djson 소스공개 -Github-

정선생 2015. 12. 10. 10:31

안녕하세요. 정선생입니다.

주말에 이야기 드린것과 같이,  DJson 소스를 Githug에 공개했습니다.

문자열 이스케입관련 버그가 있어서 수정했고,

파싱할때 좀더 형식에 맞게 체크할 수 있도록 했습니다.


버그발견하시면 댓글로 달아주시거나, tost@indf.net 으로 메일주세요.



1. 소스공개


https://github.com/jungkoo/djson_parser

가보시면 알겠지만, exception 관련 class와 enum을 빼면 5개정도의 class로 구성된걸 알 수있습니다.

생각보다 적죠? 참고로 자바 1.5이상에서 돌아갑니다.





2. find() 메소드의 참고사항

제 생각에는 다른 파서보다 DJson이 가장 큰 매력인 이유는 이 find 메소드가 아닐가 생각합니다.

사용법은 맵은 KEY명, 배열은 "[숫자]" 로 접근되고, 하위뎁스를 구분하는건 "." 으로 생각하면 됩니다.

케이스별 예제는 아래와 같습니다.

MAP과 LIST형은 특별히 .get( .. )  .size() 메소드가 지원됩니다.


* Array -> Array

Var var = Djson.parse("[[1,2],[\"dog\",\"cat\"]]");

System.out.println( var.find("[1].[0]"));  // ==> dog


* Map -> Map

Var var = Djson.parse("{indf: {items: {name: \"chul\", age: 3}}}");

System.out.println( var.find("indf.items.name")); // --> chul


* Map -> List (이때는 . 없이 바로 인덱스를 붙임)

Var var = Djson.parse("{name: [\"dog\",\"cat\"], age: [3, 6]}");

System.out.println( var.find("name[0]")); // --> dog


* List -> Map

Var var = Djson.parse("[{key:123},{key:987}]");

System.out.println( var.find("[1].key")); // --> 987




3. Var 객체에 대해

사실 String, Integer, Long, Double, List, Map, Boolean 등을 담는 랩퍼클래스에 불과합니다.

내부에는 Object변수가 있어서 해당값을 담고 type을 알아두고 사용하는겁니다.

그래서 Var클래스에는 toObject() 라는 메소드가 존재해서... Java기본 콜렉션 타입이나 데이터로 리턴됩니다.

반대로 Var var = new Var("문자열"); 같이 랩핑해서 사용도 가능합니다.





4. 파싱에러 참고사항

참고로 파싱에러 날 경우, 파싱에러 메시지와 debugtext가 출력됩니다.

이때 debugtext는 파싱중인 부분의 +-15글자를 출력합니다.

그래서 debugtext 메시지의 중간쯤을 유심히 보면 뭐가 잘못 되었는지 파악하기 쉬우실꺼에요 (^o^)/


Var var = Djson.parse("[[\"aaaaaaaaa\",\"bbbbbbbbbbbb\"] [3,4 5], [7,8,9,10 ], {key:1, key2}]");


# 에러메세지

Exception in thread "main" net.indf.djbox.json.exception.JsonParseExecption: Array next Item Character is ',' ([index=31, length=66, transaction=false, debugtext=...bbbbbbbbbbb"] [3,4 5], [7,8,9,1...])

at net.indf.djbox.json.JsonParser.list(JsonParser.java:162)

at net.indf.djbox.json.JsonParser.object(JsonParser.java:38)

at net.indf.djbox.json.Djson.parse(Djson.java:77)

at Test.main(Test.java:12)





5. 마치며

한번 써보세요. 편한 맛이 있답니다 ^..^


댓글
최근에 올라온 글
싸다구
최근에 달린 댓글