chen
2025-05-16 4cdc4b3d488e15b1d6572bdcd61a2ce92d0c8c9b
keil/include/components/hido/Include/HIDO_Json.h
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,132 @@
/*******************************************************************************
 * 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_ */