데이터 형식 과 JSon 형식 분석 소결

1.
며칠 전에 야 나 는 간단 한 데이터 교환 형식 이 있다 는 것 을 알 게 되 었 다yaml.
나 는 그것문서.을 한 번 뒤 졌 는데,아 는 곳 이 많 지 않 았 지만,한 마디 가 나 를 문득 깨 닫 게 했다.
그것 은 구조 적 으로 볼 때 모든 데 이 터 는 최종 적 으로 세 가지 유형 으로 나 눌 수 있다 고 말한다.
첫 번 째 유형 은 scalar(스칼라)입 니 다.즉,하나의 string(문자열)이나 숫자(numbers)입 니 다.예 를 들 어'베 이 징'이라는 단독 단어 입 니 다.
두 번 째 유형 은 sequence(서열),즉 몇 개의 관련 데 이 터 를 일정한 순서에 따라 병렬 하 는 것 이다.예 를 들 어'베 이 징,도 쿄'등 이다.
세 번 째 유형 은 mapping(맵)입 니 다.즉,이름/값 쌍(Name/value)입 니 다.즉,데이터 에 이름 이 있 고 이에 대응 하 는 값 도 있 습 니 다.이것 은 hash(해시)또는 dictionary(사전)라 고도 부 릅 니 다.예 를 들 어'수도:베 이 징'입 니 다.
나 는 데이터 구성의 가장 작은 단위 가 원래 이렇게 간단 하 다 는 것 을 문득 깨 달 았 다.어쩐지 프로 그래 밍 언어 에서 배열(array)과 대상(object)만 있 으 면 모든 데 이 터 를 저장 할 수 있 더 라 니.
2.
바로 생각 났 어 요.
21 세기 초 에 Douglas Crockford 는 서버 간 에 데 이 터 를 교환 할 수 있 는 간편 한 데이터 교환 형식 을 찾 았 다.이것 은 사실 두 단계 가 필요 합 니 다.첫 번 째 단 계 는 각종 데 이 터 를 하나의 문자열 로 바 꾸 는 것 입 니 다.즉,데이터 의 직렬 화(serialization)입 니 다.두 번 째 단 계 는 이 문자열 을 교환 하 는 것 입 니 다.
당시 통용 되 는 데이터 교환 언어 는 XML 이 었 으 나 Douglas Crockford 는 XML 의 생 성과 해석 이 너무 번 거 로 웠 기 때문에 그 는 간단 한 형식,즉 JSon 을 제시 했다.
제 이 슨 의 규격 은 매우 간단 하 다.한 페이지,몇 백 글자 만으로 도 분명하게 말 할 수 있 고 더 글 러 스 크 록 포드 는 이 규격 이 영원히 업그레이드 되 지 않 아 도 된다 고 주장 한다.왜냐하면 이 규정 은 모두 규정 되 어 있 기 때문이다.
1)병렬 된 데 이 터 를 쉼표(",")로 구분한다.
2)맵 은 콜론(":")으로 표시 합 니 다.
3)병렬 데이터 의 집합(배열)은 괄호("[]")로 표시 한다.
4)매 핑 된 집합(대상)은 대괄호({})로 표시 합 니 다.
위의 네 가지 규칙 은 바로 제 이 슨 형식의 모든 내용 이다.
예 를 들 어 다음 과 같은 말:
"베 이 징 시의 면적 은 1 만 6 천 800㎢이 고 상주 인 구 는 1 천 600 만 명 입 니 다."상해 시의 면적 은 6400 평방킬로미터 이 고 상주 인 구 는 1800 만 명 이다."
json 형식 으로 쓰 면 다음 과 같 습 니 다.
[{"도시":"베 이 징","면적":16800,"인구":1600},{"도시":"상하 이","면적":6400,"인구":1800}]데이터 의 구 조 를 미리 알 았 다 면 위의 표기 법 은 더욱 간소화 할 수 있 습 니 다.
["북경",16800,1600],["상해",6400,1800]]
이로부터 알 수 있 듯 이 제 이 슨 은 매우 배우 기 쉽 고 사용 하기 쉽다.그래서 짧 은 몇 년 동안 xml 를 대체 하여 인터넷 에서 가장 인기 있 는 데이터 교환 형식 이 되 었 다.
내 추측 에 의 하면 Douglas Crockford 는 데이터 구 조 를 세 가지 형식 으로 간소화 할 수 있다 는 것 을 미리 알 고 있 을 것 이다.그렇지 않 으 면 어떻게 json 을 이렇게 세련 되 게 정의 할 수 있 겠 는가!
3.
나 는 자 바스 크 립 트 를 공부 할 때 한때'배열'(array)과'대상'(object)의 근본 적 인 차이 가 어디 에 있 는 지 알 지 못 했 고 둘 다 데이터 의 집합 을 나 타 낼 수 있 었 던 것 을 기억한다.
예 를 들 어 하나의 배열 a=[1,2,3,4],그리고 하나의 대상 a={0:1,1:2,2:3,3:4}이 있 습 니 다.그리고 alert(a[1])를 실행 합 니 다.두 가지 상황 에서 의 운행 결 과 는 같 습 니 다!데이터 집합 은 배열 로 도 표시 할 수 있 고 대상 으로 도 표시 할 수 있다 는 것 이다.그렇다면 나 는 어떤 것 을 써 야 할 까?
나 는 나중에 야 배열 이 질서 있 는 데이터 의 집합 을 나타 내 고 대상 은 무질서 한 데이터 의 집합 을 나타 낸다 는 것 을 알 게 되 었 다.데이터 의 순서 가 중요 하 다 면 배열 을 사용 하고 그렇지 않 으 면 대상 을 사용한다.
4.
물론 배열 과 대상 의 또 다른 차 이 는 배열 의 데이터 에'이름'(name)이 없고 대상 의 데 이 터 는'이름'(name)이 있다 는 것 이다.
문 제 는 많은 프로 그래 밍 언어 중'관련 배열'(associative array)이라는 것 이 있다 는 점 이다.이 배열 의 데 이 터 는 이름 이 있다.
예 를 들 어 자바 script 에서 대상 을 이렇게 정의 할 수 있 습 니 다.
var a={"도시":"베 이 징","면적":16800,"인구":1600};
그러나 관련 배열 로 정의 할 수 있 습 니 다.
a["도시"]="북경";a["면적"]=16800;a["인구"]=1600;
이것 은 처음에 제 가 배열 과 대상 에 대한 혼동 을 격화 시 켰 고 나중에 야 알 게 되 었 습 니 다.자바 script 언어 에서 관련 배열 은 대상 이 고 대상 은 관련 배열 입 니 다.이 점 은 phop 언어 와 는 전혀 다 르 며,phop 에 서 는 관련 배열 도 배열 이다.
예 를 들 어 다음 자 바스 크 립 트 를 실행 합 니 다:
var a=[1,2,3,4];
a['foo']='Hello World';
alert(a.length);
마지막 결 과 는 4 였 다.즉,수조 a 의 원소 개 수 는 4 개 였 다.
그러나 같은 내용 을 실행 하 는 php 코드 는 다르다.
$a=array(1,2,3,4);
$a["foo"]="Hello world";
echo count($a);
마지막 결 과 는 5 이다.즉,배열 a 의 요소 개 수 는 5 개 이다.

좋은 웹페이지 즐겨찾기