/******************************************************* * File name: simple_json.c * Author : wfq * Versions : 1.0 * Description: simple json parse function. * Do not solve the completed json_string or string with json-string. * Completed: like array. * Must satisfy the yipai dev-protocol, and test by yipai dev-protocol. * History: * 1.Date: 2016-10-10 * Author: wfq * Action: create *********************************************************/ #include "simple_json.h" #include #include void simple_parse_json(const char * data, char *key_str, char *value_str) { char *p, *q, *t, *y; //char * zq; //[ ] int len = 0; if(data == NULL) { printf("\r\nsimple_parse_json data is NULL\r\n"); return; } if(strlen(value_str) != 0) { printf("clear value:%s\n", value_str); memset(value_str, 0, strlen(value_str)); } p = strstr(data, key_str); if(p == NULL) return; p += strlen(key_str) + 1; // printf("\nmy_parse_json2, first,data:%s\n", p); while(*p == ' ') { p++; } // printf("\nmy_parse_json2, sec,data:%s\n", p); q = strchr(p, '{'); t = strchr(p, '\"'); y = strchr(p, ','); //zq = strchr(p, '['); if((q == NULL) && (t == NULL) && (y == NULL)) { q = strstr(p, "\r\n"); if(q == NULL) q = strstr(p, "\n"); if(q == NULL) q = strstr(p, "}"); if(q == NULL) len = strlen(p); else len = strlen(p) - strlen(q); memcpy(value_str, p, len); return; } if((q == NULL) || ((t != NULL) && (strlen(t) > strlen(q)))) { if((y != NULL) && (strlen(y) > strlen(t))) { len = strlen(p) - strlen(y); memcpy(value_str, p, len); return; } else { t += 1; q = strstr(t, "\","); if(q == NULL) { q = strstr(t, "\"\r\n"); if(q == NULL) { q = strstr(t, "\"\n"); if(q == NULL) { q = strstr(t, "\""); } } } len = strlen(t) - strlen(q); memcpy(value_str, t, len); } } else { q += 1; y = strstr(q, "},"); if(y == NULL) { y = strstr(q, "}\r\n"); if(y == NULL) strstr(q, "}\n"); } len = strlen(q) - strlen(y); memcpy(value_str, q, len); return; } } char * simpleJsonGetObject(const char * data, const char * key) { if(data == NULL) { return NULL; } return NULL; } void simple_json_getarray_item(const char * data, char *key_str, char *value_str) { char *p, *q, *t, *y; //char * zq; //[ ] int len = 0; if(data == NULL) { printf("\r\nsimple_parse_json data is NULL\r\n"); return; } if(strlen(value_str) != 0) { printf("clear value:%s\n", value_str); memset(value_str, 0, strlen(value_str)); } p = strstr(data, key_str); if(p == NULL) return; p += strlen(key_str) + 1; // printf("\nmy_parse_json2, first,data:%s\n", p); while(*p == ' ') { p++; } // printf("\nmy_parse_json2, sec,data:%s\n", p); q = strchr(p, '{'); t = strchr(p, '\"'); y = strchr(p, ','); //zq = strchr(p, '['); if((q == NULL) && (t == NULL) && (y == NULL)) { q = strstr(p, "\r\n"); if(q == NULL) q = strstr(p, "\n"); if(q == NULL) q = strstr(p, "}"); if(q == NULL) len = strlen(p); else len = strlen(p) - strlen(q); memcpy(value_str, p, len); return; } if((q == NULL) || ((t != NULL) && (strlen(t) > strlen(q)))) { if((y != NULL) && (strlen(y) > strlen(t))) { len = strlen(p) - strlen(y); memcpy(value_str, p, len); return; } else { t += 1; q = strstr(t, "\","); if(q == NULL) { q = strstr(t, "\"\r\n"); if(q == NULL) { q = strstr(t, "\"\n"); if(q == NULL) { q = strstr(t, "\""); } } } len = strlen(t) - strlen(q); memcpy(value_str, t, len); } } else { q += 1; y = strstr(q, "},"); if(y == NULL) { y = strstr(q, "}\r\n"); if(y == NULL) strstr(q, "}\n"); } len = strlen(q) - strlen(y); memcpy(value_str, q, len); return; } }