La bibliothèque JSON à base zéro

La bibliothèque JSON à base zéro

Adresse projet jsoncpp , ce projet a été leptjson inspiré pour obtenir la plus fonction de base, seulement pour apprendre à utiliser.

  • Fournit une méthode parse simple () et générer () JSON texte analysé en objets, et vice versa
  • ne supporte que le type primitif Valeur du texte JSON et JSON conversion d'arbre de syntaxe abstraite
  • En utilisant la norme C / C ++ langage (C ++ 11)
  • Nous ne comptons pas sur les bibliothèques tierces

début

Commencez ce projet a besoin d'être installé gcc4.8 ou version ultérieure (pour le soutien c ++ 11)

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

entrée préliminaire

Ensuite, nous pouvons commencer à penser à un problème plus simples commencent par la façon de résoudre un texte JSON.

1, étant donné le long texte « [1,2,3] », demandant comment obtenir un tableau?

Quand nous voulons résoudre une fonction continue est appelée à faire face à un long texte, fonctions analytiques nécessaires réalisé en deux étapes:

  • Etape 1 texte d'analyse syntaxique et mettre à jour le pointeur de texte.
  • step2 résolu avec succès si le résultat de l'analyse est renvoyée.

Ici, les fonctions analytiques ne doivent appeler trois fois, la dernière rencontre « ] » à la fin

class Parser{
    char *txt;
    int parse_value() {
        /* 解析txt上下文 */
        /* 返回一个数值 */
    }
}

int main() {
    /* 建立parser */
    while (*parser.txt != ']') {
        array[i] = parser.parse_value();
    }
}
2, étant donné le long texte "[1, 2, [4,5]]", demandant comment obtenir un arbre?

De même, il est nécessaire d'appeler des fonctions analytiques trois fois, la dernière rencontre « ] » à la fin

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();
    }
}

Après l'achèvement du long texte analytique, puis considérer la fonction analytique lui-même pour atteindre. « 1 », « 2 » peuvent être résolus directement, tandis que « [4,5] » peut être considéré comme un texte long, pour faire des appels récursifs.

Le procédé I ci-dessus ont adopté la conception orientée objet, chaque opération est une fonction de l'objet. Bien sûr, on peut aussi adopter la pensée axée sur le processus, mais assurez-vous d'aborder le pointeur de texte txt entrant pour chaque fonction, ou l'utilisation de référence.

3, étant donné le long texte JSON, demandant comment obtenir un arbre?

Le projet jsoncpp est la réponse à cette question.

Je suppose que tu aimes

Origine www.cnblogs.com/zzzz76/p/12629456.html
conseillé
Classement