이것은 당신을 물릴 수있는 다양한 매핑 컬렉션 간의 미묘한 차이점 중 하나입니다. JSON은 키를 문자열로 취급합니다. Python은 유형 만 다른 고유 키를 지원합니다.
파이썬에서 (그리고 분명히 Lua에서) 매핑에 대한 키 (각각 사전 또는 테이블)는 객체 참조입니다. Python에서는 변경 불가능한 유형이거나 __hash__
메소드 를 구현하는 객체 여야합니다 . (Lua 문서는 변경 가능한 객체에 대해서도 객체의 ID를 해시 / 키로 자동으로 사용하고 동일한 문자열이 동일한 객체에 매핑되도록 문자열 인턴에 의존한다고 제안합니다.)
Perl, Javascript, awk 및 기타 여러 언어에서 해시, 연관 배열 또는 주어진 언어에 대해 호출되는 키는 문자열 (또는 Perl의 "스칼라")입니다. Perl $foo{1}, $foo{1.0}, and $foo{"1"}
에서는 모든 동일한 매핑에 대한 참조가 있습니다 %foo
--- 키는 스칼라로 평가 됩니다!
JSON은 Javascript 직렬화 기술로 시작되었습니다. (JSON은 약자 J 아바 S cript O bject N의 otation.) 물론 그것의 매핑 의미와 일치 그 매핑 표기 시맨틱을 구현한다.
직렬화의 양쪽 끝이 Python이 될 경우 피클을 사용하는 것이 좋습니다. 정말로 이것을 JSON에서 네이티브 Python 객체로 다시 변환해야한다면 몇 가지 선택이있을 것입니다. 먼저 try: ... except: ...
사전 조회 실패시 키를 숫자로 변환하기 위해 ( )를 시도 할 수 있습니다. 또는 다른 쪽 끝 (이 JSON 데이터의 직렬 변환기 또는 생성기)에 코드를 추가하면 각 키 값에 대해 JSON 직렬화를 수행하도록 할 수 있습니다 .--- 이러한 값을 키 목록으로 제공합니다. (그런 다음 Python 코드는 먼저 키 목록을 반복하여 기본 Python 객체로 인스턴스화 / 역 직렬화 한 다음 매핑에서 값에 액세스하는 데 사용합니다.)