json lib

Dependents:   grove_stream_jpa_sd2 grove_stream_jpa_sd2 grove_stream_jpa_sd2-2 grove_stream_jpa_sd2-3 ... more

jsmn.h

Committer:
mercurywaters
Date:
2016-06-02
Revision:
3:fab591fca1e7
Child:
5:dd98cf00ed9b

File content as of revision 3:fab591fca1e7:

#ifndef __JSMN_H_
#define __JSMN_H_

#include <stddef.h>

#ifdef __cplusplus
extern "C"
{
#endif
    /*
     Modified version of standard jsmn lib ... added a type "JSMN_KEY" and enabled
     parent-pointers and strict JSON check.
     */
    /**
     * JSON type identifier. Basic types are:
     *  o Object
     *  o Array
     *  o String
     *  o Other primitive: number, boolean (true/false) or null
     */
    typedef enum
    {
        JSMN_UNDEFINED = 0,
        JSMN_OBJECT = 1,
        JSMN_ARRAY = 2,
        JSMN_STRING = 3,
        JSMN_PRIMITIVE = 4,
        JSMN_KEY = 5
    } jsmntype_t;

    enum jsmnerr
    {
        /* Not enough tokens were provided */
        JSMN_ERROR_NOMEM = -1,
        /* Invalid character inside JSON string */
        JSMN_ERROR_INVAL = -2,
        /* The string is not a full JSON packet, more bytes expected */
        JSMN_ERROR_PART = -3
    };

    /**
     * JSON token description.
     * @param       type    type (object, array, string etc.)
     * @param       start   start position in JSON data string
     * @param       end     end position in JSON data string
     */
    typedef struct
    {
            jsmntype_t type;
            int start;
            int end;
            int parent;
            int childCount;
    } jsmntok_t;

    /**
     * JSON parser. Contains an array of token blocks available. Also stores
     * the string being parsed now and current position in that string
     */
    typedef struct
    {
            unsigned int pos; /* offset in the JSON string */
            unsigned int toknext; /* next token to allocate */
            int toksuper; /* superior token node, e.g parent object or array */
    } jsmn_parser;

    /**
     * Create JSON parser over an array of tokens
     */
    void jsmn_init ( jsmn_parser *parser );

    /**
     * Run JSON parser. It parses a JSON data string into and array of tokens, each describing
     * a single JSON object.
     */
    int jsmn_parse ( jsmn_parser *parser, const char *js, size_t len, jsmntok_t *tokens, unsigned int num_tokens );

#ifdef __cplusplus
}
#endif

#endif /* __JSMN_H_ */