제로 기반 JSON 라이브러리
프로젝트 주소 jsoncpp ,이 프로젝트가있다 leptjson는 단지 사용 학습을위한 가장 기본적인 기능을 달성하기 위해 영감을.
- (간단한 구문 분석을 제공합니다) 및 방법의 JSON 텍스트 개체로 구문 분석) (생성하고, 그 반대의 경우도 마찬가지
- 만 JSON과 JSON 텍스트 추상 구문 트리 변환의 기본 유형 값을 지원합니다
- 표준 C / C ++ 언어를 사용 (C ++ 11)
- 우리는 타사 라이브러리에 의존하지 않는
출발
이 프로젝트의 요구 나중에 gcc4.8 이상을 설치되기 시작 (11 ++ 지원은 c)
rm *.o
rm start
g++ -w -c -std=c++11 jsonValue.cpp
g++ -w -c -std=c++11 jsonGenerator.cpp
g++ -w -c -std=c++11 jsonParser.cpp
g++ -w -c -std=c++11 test.cpp
g++ -w jsonValue.o jsonGenerator.o jsonParser.o test.o -o start
./start
예비 엔트리
그런 다음 우리는 간단한 문제가 몇 가지 JSON 텍스트를 해결하는 방법으로 시작할에 대한 생각을 시작할 수 있습니다.
1, 배열을 가져 오는 방법을 물어 "[1,2,3]"긴 텍스트, 주어진?
우리는 긴 텍스트를 처리하기 위해 호출되는 연속 함수를 해결하려는 경우, 분석 기능은 두 단계로 실현 필수 :
- 1 단계 구문 분석 텍스트는 텍스트 포인터를 업데이트합니다.
- 분석 결과가 반환되는 경우 2 단계가 성공적으로 해결.
여기에 분석 함수는 마지막에 세 번, 마지막 만남 ']'호출 할 필요가
class Parser{
char *txt;
int parse_value() {
/* 解析txt上下文 */
/* 返回一个数值 */
}
}
int main() {
/* 建立parser */
while (*parser.txt != ']') {
array[i] = parser.parse_value();
}
}
긴 텍스트 주어진 2, "[1, 2, [4,5]]"은, 나무를 얻는 방법을 물어?
이와 유사하게, 끝까지 분석 기능을 세 번, 마지막 만남 ']'호출이 필요됩니다
typedef struct {
int number;
vector<Node* > array;
} TreeNode
class Parser{
char* txt;
TreeNode* parse_value() {
/* 解析txt上下文 */
/* 返回一个节点 */
}
}
int main() {
/* 建立parser */
/* 建立树根 */
while (*parser.txt != ']') {
root.array[i] = parser.parse_value();
}
}
다음 분석 긴 텍스트의 완성, 그리고 후 분석 함수 자체를 달성하기 위해 고려한다. "[4,5]가"긴 텍스트로 볼 수있는 반면 '1', '2'재귀 호출을 만들기 위해, 직접 해결할 수 있습니다.
I는 객체 지향 설계를 채용 한 상기 처리는 각 작업 대상물의 함수이다. 물론, 우리는 또한 각 기능, 또는 참조의 사용을 수신 TXT 텍스트 포인터를 해결하기 위해 확인 과정 중심의 사고를 채택하지만, 될 수 있습니다.
3, 나무를 얻는 방법을 묻는 긴 텍스트 JSON, 주어진?
프로젝트 jsoncpp는 이 질문에 대한 대답입니다.