123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- /*
- * Copyright (c) 2017-2019 Tencent Group. All rights reserved.
- * License-Identifier: Apache-2.0
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may
- * not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
- /**
- * Edit by shockcao@tencent.com 2018/3/15
- */
- #ifndef __JSON_PARSER_H__
- #define __JSON_PARSER_H__
- #include "lite-utils.h"
- /**
- The descriptions of the json value node type
- **/
- enum JSONTYPE { JSNONE = -1, JSSTRING = 0, JSOBJECT, JSARRAY, JSNUMBER, JSBOOLEAN, JSNULL, JSTYPEMAX };
- /**
- The error codes produced by the JSON parsers
- **/
- enum JSON_PARSE_CODE { JSON_PARSE_ERR, JSON_PARSE_OK, JSON_PARSE_FINISH };
- /**
- The return codes produced by the JSON parsers
- **/
- enum JSON_PARSE_RESULT { JSON_RESULT_ERR = -1, JSON_RESULT_OK };
- typedef int (*json_parse_cb)(char *p_cName, int iNameLen, char *p_cValue, int iValueLen, int iValueType,
- void *p_Result);
- /**
- * @brief Parse the JSON string, and iterate through all keys and values,
- * then handle the keys and values by callback function.
- *
- * @param[in] p_cJsonStr @n The JSON string
- * @param[in] iStrLen @n The JSON string length
- * @param[in] pfnCB @n Callback function
- * @param[out] p_CBData @n User data
- * @return JSON_RESULT_OK success, JSON_RESULT_ERR failed
- * @see None.
- * @note None.
- **/
- int json_parse_name_value(char *p_cJsonStr, int iStrLen, json_parse_cb pfnCB, void *p_CBData);
- /**
- * @brief Get the value by a specified key from a json string
- *
- * @param[in] p_cJsonStr @n the JSON string
- * @param[in] iStrLen @n the JSON string length
- * @param[in] p_cName @n the specified key string
- * @param[out] p_iValueLen @n the value length
- * @param[out] p_iValueType @n the value type
- * @return A pointer to the value
- * @see None.
- * @note None.
- **/
- char *json_get_value_by_name(char *p_cJsonStr, int iStrLen, char *p_cName, int *p_iValueLen, int *p_iValueType);
- /**
- * @brief Get the JSON object point associate with a given type.
- *
- * @param[in] type @n The object type
- * @param[in] str @n The JSON string
- * @returns The json object point with the given field type.
- * @see None.
- * @note None.
- */
- char *json_get_object(int type, char *str);
- char *json_get_next_object(int type, char *str, char **key, int *key_len, char **val, int *val_len, int *val_type);
- /**
- * @brief retrieve each key&value pair from the json string
- *
- * @param[in] str @n Json string to revolve
- * @param[in] pos @n cursor
- * @param[out] key @n pointer to the next Key object
- * @param[out] klen @n Key object length
- * @param[out] val @n pointer to the next Value object
- * @param[out] vlen @n Value object length
- * @param[out] vtype @n Value object type(digital, string, object, array)
- * @see None.
- * @note None.
- */
- #define json_object_for_each_kv(str, pos, key, klen, val, vlen, vtype) \
- for (pos = json_get_object(JSOBJECT, str); \
- pos != 0 && *pos != 0 && (pos = json_get_next_object(JSOBJECT, pos, &key, &klen, &val, &vlen, &vtype)) != 0;)
- /**
- * @brief retrieve each entry from the json array
- *
- * @param[in] str @n Json array to revolve
- * @param[in] pos @n cursor
- * @param[out] entry @n pointer to the next entry from the array
- * @param[out] len @n entry length
- * @param[out] type @n entry type(digital, string, object, array)
- * @see None.
- * @note None.
- */
- #define json_array_for_each_entry(str, pos, entry, len, type) \
- for (pos = json_get_object(JSARRAY, str); \
- pos != 0 && *pos != 0 && (pos = json_get_next_object(JSARRAY, ++pos, 0, 0, &entry, &len, &type)) != 0;)
- /**
- * @brief backup the last character to register parameters,
- * and set the end character with '\0'
- *
- * @param[in] json_str @n json string
- * @param[in] str_len @n json string lenth
- * @param[out] register @n used to backup the last character
- * @see None.
- * @note None.
- */
- #define backup_json_str_last_char(json_str, str_len, register) \
- { \
- register = *((char *)json_str + str_len); \
- *((char *)json_str + str_len) = '\0'; \
- }
- /**
- * @brief restore the last character from register parameters
- *
- * @param[in] json_str @n json string
- * @param[in] str_len @n json string lenth
- * @param[in] register @n used to restore the last character
- * @see None.
- * @note None.
- */
- #define restore_json_str_last_char(json_str, str_len, register) \
- { \
- *((char *)json_str + str_len) = register; \
- }
- #endif /* __JSON_PARSER_H__ */
|