← 목록
기타 2026-05-27 3KB 읽기 3분

QnA 변환기 빈배열 버그 수정 (v2.2)

개요

/Users/ef/CrownyDoc/qna/한선씨/답변_to_견적JSON.한선[] 3바이트만 출력하던 버그 수정.

원인 (2가지 VM 버그 복합)

버그 1: 맵생성() + JSON생성() 호환 불가

  • 맵생성() 반환값은 타입() == "array" 이나 길이() == 0
  • JSON생성() 내부 _맵인가() 함수는 길이 >= 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 객체 문자열

검증 결과

  • 출력 크기: 1394B (기존 3B → 466배)
  • Python 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 계층 문제)

    잔여 이슈

    1. JSON.한선 라이브러리 자체는 미수정맵생성() 결과를 serialization하는 근본 버그는 VM 계층 문제. crownyc.c에서 hashmap 타입 인식 수정이 필요하나 이번 범위 밖.
    2. 숫자 >= 10000 타입 버그 — VM이 대형수를 배열로 저장하는 설계. feedback_crownyc_vm_bugs.md에 추가 권장.
    3. 학습DB 등록 완료: VM_대형수_JSON직렬화_우회, VM_맵생성_JSON생성_버그