제로 기반 JSON 라이브러리

제로 기반 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는 이 질문에 대한 대답입니다.

추천

출처www.cnblogs.com/zzzz76/p/12629456.html