QnA 변환기 빈배열 버그 수정 (v2.2)
개요
/Users/ef/CrownyDoc/qna/한선씨/답변_to_견적JSON.한선 이 [] 3바이트만 출력하던 버그 수정.
원인 (2가지 VM 버그 복합)
버그 1: 맵생성() + JSON생성() 호환 불가
맵생성()반환값은타입() == "array"이나길이() == 0JSON생성()내부_맵인가()함수는길이 >= 2조건으로 판단 → 실패- 결과: 맵 전체가
[]로 직렬화
버그 2: 숫자 >= 10000 → 타입 array로 저장
- VM 내부에서 큰 정수(9999 초과)는 타입이
"number"대신"array"로 저장됨 JSON생성()이 array 분기를 타면서[]출력단가:1800000→단가:[]로 잘못 직렬화
버그 3 (부수): 빈배열 vs 대형수 구별 불가
- 두 가지 모두
타입=array, 길이=0 문자열변환()결과도 각각 garbage 값으로 충돌 가능
수정 방식
전면 수동 문자열 조립 — JSON생성() 사용 포기, 모든 출력을 문자열 연산으로 직접 구성.
핵심 패턴:
js문자(s): 문자열 →"이스케이프된값"(역슬래시, 큰따옴표, 개행 처리)js수(n): 숫자 →문자열변환(n)(대형수 버그 우회)배열JS(arr): 이미-직렬화된 문자열 배열 →[a,b,c]항목JS(...): 항목 하나 → JSON 객체 문자열그룹JS(종류, 항목들JS): 분류 그룹 → JSON 객체 문자열
검증 결과
json.load() 통과: 유효한 JSON견적번호: EST-SIMPLE-20260527-001공급받는자.기관명: 테스트 교회분류: ['제품', '인건비', '기타비용'] 3종정산옵션: {"절사단위":10000,"부가세율":10}단가 정확: 1800000, 450000, 250000, 100000/qna/변환 POST 통과관련 파일
- 변환기:
/Users/ef/CrownyDoc/qna/한선씨/답변_to_견적JSON.한선(v2.2) - 컴파일 결과:
/Users/ef/CrownyDoc/qna/bin/답변변환.toau - 테스트 입력:
/tmp/answers_v2.json - JSON 라이브러리:
/Users/ef/CrownyOS/crownyc/libs/JSON.한선(버그 있는 채로 유지 — VM 계층 문제)
잔여 이슈
- JSON.한선 라이브러리 자체는 미수정 —
맵생성()결과를 serialization하는 근본 버그는 VM 계층 문제.crownyc.c에서 hashmap 타입 인식 수정이 필요하나 이번 범위 밖. - 숫자 >= 10000 타입 버그 — VM이 대형수를 배열로 저장하는 설계.
feedback_crownyc_vm_bugs.md에 추가 권장. - 학습DB 등록 완료:
VM_대형수_JSON직렬화_우회,VM_맵생성_JSON생성_버그