(json-c學習1) linux c語言解析json數組(純代碼)

 1 #include "json.h"
  2 #include <stdio.h>
  3 #include <stdlib.h>
  4 #include <string.h>
  5
  6 #define OR_GROUP "group"
  7 #define LOOP_NUMBER "loop_number"
  8 #define SENSOR_ADDRESS "sensor_address"
  9 #define BODY  "body"
 10 #define MODULE_ID "module_id"
 11
 12 char *TestBodyFunction(void)
 13 {
 14     int len = 0;
 15     char *jsonMsgBuf = NULL;
 16     char *str = "{\"group\":1, \"loop_number\":1, \"sensor_address\":1, \"body\":[{\"loop_number\":1, \"module_id\":2}, \
 17 {\"loop_number\":1, \"module_id\":3}, {\"loop_number\":1, \"module_id\":4}]}";
 18     len = strlen(str);
 19     printf("len = %d\n", len);
 20     printf("str = %s\n", str);
 21
 22     jsonMsgBuf = (char *)malloc(len+1);
 23     memset(jsonMsgBuf, 0, len+1);
 24     memcpy(jsonMsgBuf, str, len);
 25     return jsonMsgBuf;
 26 }
 27
 28 //struct json_object *TestArrayFunction(void)
 29 char *TestArrayFunction(void)
 30 {
 31     int len = 0;
 32     //struct json_object *jsonMsgBuf = NULL;
 33     char *jsonMsgBuf = NULL;
 34     char *str = "[{\"loop_number\":1, \"sensor_address\":2}, {\"loop_number\":1, \"sensor_address\":3}, {\"loop_number\":1,     \"sensor_address\":4}]";
 35     len = strlen(str);
 36     printf("len = %d\n", len);
 37     printf("str = %s\n", str);
 38
 39     //jsonMsgBuf = (struct json_object*)malloc(len+1);
 40     jsonMsgBuf = (char *)malloc(len+1);
 41     if (jsonMsgBuf == NULL)
 42     {
 43         printf("failed to malloc!\n");
 44     }
 45     memset(jsonMsgBuf, 0, len+1);
 46     memcpy(jsonMsgBuf, str, len);
 47     return jsonMsgBuf;
 48 }
 49
 50 int ParsingBodyFunction(char *jsonMsgBuf)
 51 {
	//解析內容格式:
	/*
	{
		"group":1,
		"loop_number":1,
		"sensor_address":1,
		"body": 
		[
			{"loop_number":1, "module_id":1},
			{"loop_number":1, "module_id":2},
			{"loop_number":1, "module_id":3},
			...
		]
	}
	*/
 52     int groupId = 0;
 53     int ln = 0;
 54     int sd = 0;
 55     int count = 0;
 56     int lnn = 0;
 57     int mi = 0;
 58     int i = 0;
 59     json_object *pstObj = NULL;
 60     json_object *array = NULL;
 61     json_object *arrayObj = NULL;
 62     pstObj = json_tokener_parse(jsonMsgBuf);
 63     if (NULL == pstObj)
 64     {
 65         printf("%s : json_tokener_parse failed.\n", __FUNCTION__);
 66     }
 67     else
 68     {
 69        json_object_object_foreach(pstObj, key1, val1)
 70        {
 71             if (0 == strcmp(key1, OR_GROUP))
 72             {
 73                 groupId = json_object_get_int(val1);
 74                 printf("groupId = %d\n", groupId);
 75             }
 76             else if (0 == strcmp(key1, LOOP_NUMBER))
 77             {
 78                 ln = json_object_get_int(val1);
 79                 printf("ln = %d\n", ln);
 80             }
 81             else if (0 == strcmp(key1, SENSOR_ADDRESS))
 82             {
 83                 sd = json_object_get_int(val1);
 84                 printf("sd = %d\n", sd);
 85             }
 86             else if (0 == strcmp(key1, BODY))
 87             {
 88                 count  = json_object_array_length(val1);
 89                 printf("count = %d\n", count);
 90                                 //array = json_object_get_array(val1);
 91                 for (i = 0; i < count; i++)
 92                 {
 93                     arrayObj = json_object_array_get_idx(val1, i);
 94                     json_object_object_foreach(arrayObj, key2, val2)
 95                     {
 96                         if (0 == strcmp(key2, LOOP_NUMBER))
 97                         {
 98                             lnn = json_object_get_int(val2);
 99                             printf("lnn = %d\n", lnn);
100                         }
101                         else if (0 == strcmp(key2, MODULE_ID))
102                         {
103                             mi = json_object_get_int(val2);
104                             printf("mi = %d\n", mi);
105                         }
106                     }
107                }
108             }
109         }
110     }
111 }
112
113 //單個傳感器id
114 typedef struct _SinglePointIdStruct
115 {
116         int loopNumber;
117         int sensorAddress;
118 } SinglePointIdStruct;
119
120 //int ParsingArrayFunction(struct json_object *jsonMsgBuf)
121 int ParsingArrayFunction(char *jsonMsgBuf)
122 {
	//解析內容格式:
    /*
	[
		{"loop_number": 1,  "sensor_address":1},
		{"loop_number": 1,  "sensor_address":1},
		{"loop_number": 2,  "sensor_address":1},
		{"loop_number": 2,  "sensor_address":1},
		…
	]
	*/
123     int i = 0;
124     int count = 0;
125     struct json_object *arrayObj = NULL;
126     json_object *array = NULL;
127
128                 // struct array_list *array = json_object_get_array(jsonMsgBuf);
129     //struct json_object *array = jsonMsgBuf;
130     array = json_tokener_parse(jsonMsgBuf);
131     int ln = 0;
132     int sd = 0;
133     SinglePointIdStruct *moduleArray = NULL;
134     if (NULL == array)
135     {
136         printf("%s : json_tokener_parse failed.\n", __FUNCTION__);
137         return -1;
138     }
139     else
140     {
141         count = json_object_array_length(array);
142         printf("array count = %d\n", count);
143         moduleArray = (SinglePointIdStruct*)malloc(count*sizeof(SinglePointIdStruct));
144         if (moduleArray == NULL)
145         {
146             printf("%s malloc failed!\n");
147             return -2;
148         }
149         for (i = 0; i < count; i++)
150         {
151             arrayObj = json_object_array_get_idx(array, i);
152             json_object_object_foreach(arrayObj, key1, val1)
153             {
154                 if (0 == strcmp(key1, LOOP_NUMBER))
155                 {
156                     ln = json_object_get_int(val1);
157                     printf("array ln = %d\n", ln);
158                 }
159                 else if (0 == strcmp(key1, SENSOR_ADDRESS))
160                 {
161                     sd = json_object_get_int(val1);
162                     printf("array sd = %d\n", sd);
163                 }
164                         //AllSensorInfoArray[ln-1][sd-1].startStopFlag = 1;  //表示要啓動
165             }
166         }
167     }
168 }
169
170 int main(void)
171 {
172     char *body = TestBodyFunction();
173     ParsingBodyFunction(body);
174     printf("=====================================================\n");
175     //struct json_object *array = TestArrayFunction();
176     char *array = TestArrayFunction();
177     ParsingArrayFunction(array);
178     return 0;
179 }
180
181
                                                                                                          

需要這些頭文件(到json庫中去找):

運行結果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章