/*******************************************************************************
|
* 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_ */
|