La biblioteca JSON base cero

La biblioteca JSON base cero

Proyecto Dirección jsoncpp , este proyecto ha sido leptjson inspirado para lograr la función más básica, sólo para aprender a usar.

  • Proporciona un análisis sintáctico sencilla () y generar () texto JSON método analiza en objetos, y viceversa
  • Sólo es compatible con el valor de tipo primitivo de JSON y JSON texto conversión árbol de sintaxis abstracta
  • Usando el lenguaje estándar de C / C ++ (C ++ 11)
  • No nos basamos en las bibliotecas de terceros

comienzo

Iniciar este necesidades del proyecto para ser instalados gcc4.8 o posterior (con el apoyo de 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

Inscripción preliminar

Entonces podemos empezar a pensar en un problemas más simples comienzan con la forma de resolver un texto JSON.

1, dado el largo texto "[1,2,3]", preguntando cómo conseguir una matriz?

Cuando queremos resolver una función continua que se llama para hacer frente a un texto largo, funciones analíticas requeridos realizan en dos pasos:

  • texto de análisis paso 1 y actualizar el puntero de texto.
  • Paso 2 resuelto con éxito si se devuelve el resultado del análisis.

Aquí funciones analíticas sólo tienen que llamar tres veces, la última de encuentro ']' a extremo

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

int main() {
    /* 建立parser */
    while (*parser.txt != ']') {
        array[i] = parser.parse_value();
    }
}
2, dado el largo texto "[1, 2, [4,5]]", preguntando cómo conseguir un árbol?

Del mismo modo, existe la necesidad de llamar a las funciones analíticas en tres ocasiones, la última de encuentro ']' a 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();
    }
}

Después de la finalización del texto largo analítica, y luego considerar la propia función analítica de lograr. '1', '2' se pueden resolver directamente, mientras que "[4,5]" puede ser visto como un texto largo, para hacer llamadas recursivas.

El proceso anterior he adoptado el diseño orientado a objetos, cada operación es una función del objeto. Por supuesto, también podemos adoptar el pensamiento orientado al proceso, pero asegúrese de abordar puntero de texto txt de entrada para cada función, o el uso de referencia.

3, dado el JSON texto largo, preguntando cómo conseguir un árbol?

El proyecto jsoncpp es la respuesta a esta pregunta.

Supongo que te gusta

Origin www.cnblogs.com/zzzz76/p/12629456.html
Recomendado
Clasificación