yincheng.zhong
2024-08-20 7744fffacb03dc81cc9dbaf9f5d86a0f21e79c03
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
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_ */