ARX119의 BIM/CAD 연구소

arx119.egloos.com

포토로그 방명록 업그레이드/기능 요청



iDwgJson 프로그램 소개 (v1.0) 베타버전 iDwgJSON 프로그램

안녕하세요.

오늘은 Json 파일에 대한 설명으로 시작해볼까 합니다. 최근 웹에서는 Json파일을 많이 사용하고 있습니다.
Json파일에 대해서 잘 모르시는 분들은 아래 페이지를 방문하면 잘 알수 있을것입니다.

Json 공식 홈페이지 : http://www.json.org
Json 개요 설명 : http://www.json.org/json-ko.html

JSON(JavaScript Object Natation)은 간단한 형식의 DATA 교환 형식입니다. JSON 형식은 사람이 이해하기 쉽고
컴퓨터에서 사용이 용이한 구조로 되어 있습니다.

JSON 파일은 C/C++, C#, Java, JavaScript, Perl, Python 그외 다양한 언어에 포팅되어 사용되고 있습니다.

하지만 현재까지 AutoLISP에서 사용할 수 있는 API가 없어서 iDwgJson을 만들게 되었습니다. 네 오직 AutoLISP개발자를
위한 플러그인이라고 보셔도 됩니다.

리습은 강력한 기능을 가지고 있지만 파일 IO에 있어서는 많이 부족한것이 사실입니다.

대부분의 LISP개발자들은 자체 포멧을 통해서 프로그램의 결과 정보를 저장 관리하고 있습니다.
리습 개발자들이 iDwgJson 툴을 이용하게 되면 정보를 체계적으로 관리하고 타 시스템과 호환을 할 수 있으므로
정보교환 측면에서는 기대를 줄수있으리라 생각이 듭니다.

----------------- JSON 포멧설명 (JSON공식 사이트 내용을 인용함) -------------------------

object는 name/value 쌍들의 비순서화된 SET이다. object는 { (좌 중괄호)로 시작하고 } (우 중괄호)로 끝내어 표현한다.
각 name 뒤에 : (colon)을 붙이고 , (comma)로 name/value 쌍들 간을 구분한다.


array은 값들의 순서화된 collection 이다. array는 [ (left bracket)로 시작해서 ] (right bracket)로 끝내어 표현한다.
, (comma)로 array의 값들을 구분한다.




value는 큰따옴표안에 string, number ,true ,false , null, object ,array이 올수 있다. 이러한 구조들을 포함한다.



string은 큰따옴표안에 둘러 싸인 zero 이상 Unicode 문자들의 조합이며, 쌍다옴표안에 감싸지며,backslash escape가 적용된다.
 하나의 문자(character)도 하나의 문자열(character string)로서 표현된다. string은 C 또는 Java 문자열 처럼 매우 많이 비슷하다.

number는 8진수와 16진수 형식을 사용하지 않는것을 제외하면 C와 Java number 처럼 매우 많이 비슷하다.




아래는 JSON의 함수가 어떻게 Autolisp에서 지원하는지 주요 함수를 가지고 설명하겠습니다.


; arx119.egloos.com (arx119@nate.com)
; json for autolisp (2015-02-08)
; 2015년 2월 13일

; 함수목록
; json-load : json 파일을 읽어서 autolisp 함수에서 사용할 있도록 지원하는 함수
; json-save : Json 객체들의 정보를 파일로 저장하는 함수
; json-object : Json 객체를 생성해서 아이디 값을 반환하는 함수
; json-comment : Json 객체의 주석정보를 추가하는 함수
; json-size : Json 객체의 Member 개수를 조회하는 함수
; json-get : Json 객체의 Member의 이름으로 값을 조회하는 함수
; json-put : Json 객체의 Member에 값을 입력하는 함수
; json-clear : Json 객체를 초기화 하는 함수
; json-isnull : Json 객체의 특정 맴버가 null 타입인지를 체크하는 함수
; json-isbool : Json 객체의 특정 맴버가 bool 타입인지를 체크하는 함수
; json-isint : Json 객체의 특정 맴버가 int 타입인지를 체크하는 함수
; json-isintegral : Json 객체의 특정 맴버가 integral 타입인지를 체크하는 함수
; json-isdouble : Json 객체의 특정 맴버가 double 타입인지를 체크하는 함수
; json-isnumeric : Json 객체의 특정 맴버가 numeric 타입인지를 체크하는 함수
; json-isstring : Json 객체의 특정 맴버가 string 타입인지를 체크하는 함수
; json-isarray : Json 객체의 특정 맴버가 array 타입인지를 체크하는 함수
; json-isobject : Json 객체의 특정 맴버가 object 타입인지를 체크하는 함수

; 예제를 통한 함수 설명
; wt1, wt2 리습함수는 autocad에서 json을 쉽게 생성하고 변경하는 예제를 참고로
; load, save, object, get, put, clear 함수를 이해하고자 합니다.

; 함수설명 : json-save <jobject> <filename>
; 입력변수 : 파일경로 (전체경로 또는 상대경로)
; 리 턴 값 : long(성공) , nil(실패)
; 예 시 : (setq jobj (json-load <filename>))

; 함수설명 : json-object
; 입력변수 : 없음
; 리 턴 값 : long(성공) , nil(실패)
; 예 시 : (setq jobj (json-object))

; 함수설명 : json-comment <comment string>
; 입력변수 : 주석구문 "//" 를 반드시 포함
; 리 턴 값 : T(성공) , nil(실패)
; 예 시 : (setq jobj (json-comment "//json객체 설명"))

; json-object, json-comment
(defun c:wt1()
;autocad에서 json 객체를 생성함
(setq jobj1 (json-object))
;생성된 객체에 주석정보를 입력함, 주의 '//' 주석 마크로 식작해야 함
(json-comment jobj1 "//json 객체 주석")

;autocad에서 두번째 json 객체를 생성함
(setq jobj2 (json-object))
(json-comment jobj2 "//json 두번째 생성객체")
;jobj2 객체에 "철골" 이라는 맴버를 추가하고 값을 1200 입력함
(json-put jobj2 "철골" 1200)
(json-put jobj2 "콘크리트" 3400)
(json-put jobj2 "파이프" 1500)

;autocad에서 세번째 json 객체를 생성함
(setq jobj3 (json-object))
(json-comment jobj3 "//json 세번째 생성객체")
(json-put jobj3 "철골" 1500)
(json-put jobj3 "콘크리트" 4400)
(json-put jobj3 "파이프" 900)

;jobj1의 하위에 "101동 아파트" 맴버 이름으로 jobj2, jobj3를 연결함
(json-put jobj1 "101동 아파트" jobj2)
(json-put jobj1 "102동 아파트" jobj2)
(json-put jobj1 "103동 아파트" jobj3)
(json-put jobj1 "104동 아파트" jobj3)

;json 객체 저장
(json-save jobj1 "result.json")

(json-clear jobj3)
(json-clear jobj2)
(json-clear jobj1)
(princ)
)

; 함수설명 : json-load
; 입력변수 : 파일경로 (전체경로 또는 상대경로)
; 리 턴 값 : long(성공) , nil(실패)
; 예 시 : (setq jobj (json-load <filename>))
(defun c:wt2()
;result.json파일의 10
(setq ct101 (getint "\n101동 아파트의 수정 콘크리트 물량입력 :"))
;json 파일로드
(setq jobj1 (json-load "result.json"))
;101동 아파트 json 객체 얻기
(setq jobj2 (json-get jobj1 "101동 아파트"))
;값출력
(setq cs101 (json-get jobj2 "콘크리트"))
(princ (strcat "\\n101동 아파트 콘크리트 물량 : " (itoa cs101)))
;101동 아파트 물량 저장
(if (/= ct101 cs101)
(progn
(json-put jobj2 "콘크리트" ct101)
(json-save jobj1 "result.json")
)
)
(json-clear jobj2)
(json-clear jobj1)
(princ)
)

;
; 함수설명 : autolisp의 객체정보를 json으로 저장하는 방법을 설명함
;
(defun c:ow1()
(setq ename (car (entsel)))
(setq jobj1 (json-object))
(json-put jobj1 "circle1" ename)
(json-save jobj1 "entity.json")
(json-clear jobj1)
(princ)
)

[다운로드]

iDwgJson2000.arx : AutoCAD 2000~2002(32) 버전
iDwgJson2004.arx : AutoCAD 2004~2006(32) 버전
iDwgJson2007.arx : AutoCAD 2007~2009(32) 버전
iDwgJson2007x.arx : AutoCAD 2007~2009(64) 버전
- iDwgJson2010.arx : AutoCAD 2010~2012(32) 버전
iDwgJson2010x.arx : AutoCAD 2010~2012(64) 버전
iDwgJson2013.arx : AutoCAD 2013~2014(32) 버전
iDwgJson2013x.arx : AutoCAD 2013~2014(64) 버전
iDwgJson2015.arx : AutoCAD 2015(32) 버전
iDwgJson2015x.arx : AutoCAD 2015(64) 버전
- sample.lsp 샘플lisp 파일 다운로드


덧글

  • inno3dweb 2018/12/02 19:30 # 삭제 답글

    LISP을 JSON 연계인가요??
    좋습니다. 업무 활용을 할 수 있어 보입니다.

    준비하셔서 관련 강좌를 동영상이나 웨비나로
    해보시면 어떨까요??
댓글 입력 영역



구글번역

통계 위젯 (화이트)

9628
492
598294

국가접속Flag

free counters