/******************************************************************************* * File Name : HIDO_Json.h * Description : * Created on : 2019年5月12日 * Author : www.hido-studio.com *******************************************************************************/ #ifndef HIDO_JSON_H_ #define HIDO_JSON_H_ /******************************************************************************* * Include Files * *******************************************************************************/ #include "HIDO_TypeDef.h" /******************************************************************************* * Macro * *******************************************************************************/ #define MAX_JSON_STRING_LEN 1500 #define MAX_JSON_NODE_CNT 50 #define MAX_JSON_ARRARY_NODE_CNT 10 /******************************************************************************* * Type Definition * *******************************************************************************/ typedef enum { HIDO_JSON_STATE_IDLE = 0, HIDO_JSON_STATE_BEGIN, HIDO_JSON_STATE_END, HIDO_JSON_STATE_KEY_BEGIN, HIDO_JSON_STATE_KEY_END, HIDO_JSON_STATE_VALUE_BEGIN, HIDO_JSON_STATE_VALUE_END, HIDO_JSON_STATE_VALUE_ARRARY_BEGIN, HIDO_JSON_STATE_VALUE_ARRARY_END, HIDO_JSON_STATE_VALUE_STRING_BEGIN, HIDO_JSON_STATE_VALUE_STRING_END, HIDO_JSON_STATE_VALUE_INTEGER_BEGIN, HIDO_JSON_STATE_VALUE_INTEGER_END, HIDO_JSON_STATE_VALUE_DOUBLE_BEGIN, HIDO_JSON_STATE_VALUE_DOUBLE_END, HIDO_JSON_STATE_VALUE_JSON_BEGIN, HIDO_JSON_STATE_VALUE_JSON_END, HIDO_JSON_STATE_VALUE_NULL_BEGIN, HIDO_JSON_STATE_VALUE_NULL_END, HIDO_JSON_STATE_LAST, }HIDO_JsonStateEnum; typedef enum { HIDO_JSON_TYPE_NULL, HIDO_JSON_TYPE_INTEGER, HIDO_JSON_TYPE_DOUBLE, HIDO_JSON_TYPE_ARRARY, HIDO_JSON_TYPE_STRING, HIDO_JSON_TYPE_JSON, }HIDO_JsonTypeEnum; typedef struct JsonNodeStruct { HIDO_UINT32 m_u32Len; HIDO_CHAR *m_pcPtr; }HIDO_JsonDptr; struct HIDO_JsonNode; typedef struct HIDO_JsonNode { HIDO_JsonTypeEnum m_eType; HIDO_JsonDptr m_stKey; HIDO_JsonDptr m_stValue; HIDO_CHAR *m_pcEnd; struct HIDO_JsonNode *m_pstNext; }HIDO_JsonNodeStruct; struct HIDO_JsonArraryNode; typedef struct HIDO_JsonArraryNode { HIDO_JsonNodeStruct *m_pstJson; struct HIDO_JsonArraryNode *m_pstNext; }HIDO_JsonArraryNodeStruct; typedef struct HIDO_Json { HIDO_CHAR *m_pcJson; HIDO_UINT32 m_u32Len; HIDO_UINT32 m_u32RemainingSize; }HIDO_JsonStruct; typedef struct JsonArrayStruct { HIDO_CHAR *m_pcArray; HIDO_UINT32 m_u32Len; HIDO_UINT32 m_u32RemainingSize; }HIDO_JsonArrayStruct; typedef struct { HIDO_UINT32 m_u32Hash; const HIDO_CHAR *m_pcString; HIDO_JsonNodeStruct *m_pstJson; }HIDO_JsonKeyStruct; /******************************************************************************* * Global Function * *******************************************************************************/ HIDO_VOID HIDO_JsonInit(void); HIDO_VOID HIDO_JsonTest(void); HIDO_VOID HIDO_JsonNodeFree(HIDO_JsonNodeStruct *_pstJsonNode); HIDO_VOID HIDO_JsonArrayNodeFree(HIDO_JsonArraryNodeStruct *_pstJsonArraryNode); HIDO_JsonNodeStruct *HIDO_JsonJsonParse(HIDO_CHAR *_pcJsonString); HIDO_JsonNodeStruct *HIDO_JsonGetValue(HIDO_JsonNodeStruct *_pstJsonNodeList, HIDO_CHAR *_pcKey); HIDO_INT32 HIDO_JsonGetInteger(HIDO_JsonNodeStruct *_pstJsonNodeList, HIDO_CHAR *_pcKey, HIDO_INT32 *_pi32Value); HIDO_INT32 HIDO_JsonGetFloat(HIDO_JsonNodeStruct *_pstJsonNodeList, HIDO_CHAR *_pcKey, HIDO_FLOAT *_pfValue); HIDO_INT32 HIDO_JsonGetDouble(HIDO_JsonNodeStruct *_pstJsonNodeList, HIDO_CHAR *_pcKey, HIDO_DOUBLE *_pdValue); HIDO_INT32 HIDO_JsonGetString(HIDO_JsonNodeStruct *_pstJsonNodeList, HIDO_CHAR *_pcKey, HIDO_CHAR **_ppcValue); HIDO_INT32 HIDO_JsonGetJson(HIDO_JsonNodeStruct *_pstJsonNodeList, HIDO_CHAR *_pcKey, HIDO_CHAR **_ppcValue); HIDO_INT32 HIDO_JsonGetJsonArrary(HIDO_JsonNodeStruct *_pstJsonNodeList, HIDO_CHAR *_pcKey, HIDO_JsonArraryNodeStruct **_ppstValue); HIDO_INT32 HIDO_JsonJsonInit(HIDO_JsonStruct *_pstJsonString, HIDO_CHAR *_pcJsonStringBuf, HIDO_UINT32 _u32JsonStringBufSize); HIDO_INT32 HIDO_JsonAddInteger(HIDO_JsonStruct *_pstJsonString, HIDO_CHAR *_pcKey, HIDO_INT32 _i32Value); HIDO_INT32 HIDO_JsonAddString(HIDO_JsonStruct *_pstJson, const HIDO_CHAR *_pcKey, const HIDO_CHAR *_pcValue); HIDO_INT32 HIDO_JsonAddObject(HIDO_JsonStruct *_pstJsonString, HIDO_CHAR *_pcKey, HIDO_CHAR *_pcValue); HIDO_INT32 HIDO_JsonAddArraryBegin(HIDO_JsonStruct *_pstJson, HIDO_CHAR *_pcKey, HIDO_JsonArrayStruct *_pstJsonArrry); HIDO_INT32 HIDO_JsonAddArraryEnd(HIDO_JsonStruct *_pstJson, HIDO_JsonArrayStruct *_pstJsonArrry); HIDO_INT32 HIDO_JsonAddJsonBegin(HIDO_JsonStruct *_pstJsonString, HIDO_CHAR *_pcKey, HIDO_JsonStruct *_pstSubJsonString); HIDO_INT32 HIDO_JsonAddJsonEnd(HIDO_JsonStruct *_pstJsonString, HIDO_JsonStruct *_pstSubJsonString); HIDO_INT32 HIDO_JsonAddIntegerArrary(HIDO_JsonStruct *_pstJsonString, HIDO_CHAR *_pcKey, HIDO_INT32 *_pi32Value, HIDO_UINT32 _u32ArraryCnt); HIDO_INT32 HIDO_JsonAddStringArrary(HIDO_JsonStruct *_pstJsonString, HIDO_CHAR *_pcKey, HIDO_CHAR **_ppcValue, HIDO_UINT32 _u32ArraryCnt); HIDO_INT32 HIDO_JsonAddObjectArrary(HIDO_JsonStruct *_pstJsonString, HIDO_CHAR *_pcKey, HIDO_CHAR **_ppcValue, HIDO_UINT32 _u32ArraryCnt); HIDO_INT32 HIDO_JsonGetIntegerArrary(HIDO_JsonNodeStruct *_pstJsonNodeList, HIDO_CHAR *_pcKey, HIDO_INT32 *_pi32Value, HIDO_UINT32 *_pu32ValueCnt); #endif /* HIDO_JSON_H_ */