Files
security_deviceauth/frameworks/deviceauth_lite/source/json/jsonutil.c
T
fuzikun aad69da60d fix review bugs
Signed-off-by: fuzikun <fuzikun@huawei.com>
2022-03-10 11:22:41 +08:00

219 lines
4.8 KiB
C
Executable File

/*
* Copyright (c) 2020 Huawei Device Co., Ltd.
* 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.
*/
#include "jsonutil.h"
#include "mem_stat.h"
#include "cJSON.h"
json_handle parse_json(const char *data)
{
cJSON *root = NULL;
if (data != NULL) {
root = cJSON_Parse(data);
}
return (void *)root;
}
void free_json(json_handle handle)
{
if (handle != NULL) {
cJSON_Delete((cJSON *)handle);
}
}
json_pobject get_json_obj(json_pobject parent, const char *field)
{
return cJSON_GetObjectItem((cJSON *)parent, field);
}
int32_t get_json_int(json_pobject obj, const char *field)
{
int32_t ret = -1;
if (obj == NULL) {
return ret;
}
if (field == NULL) {
return ((cJSON *)obj)->valueint;
}
cJSON *obj_value = NULL;
do {
obj_value = (cJSON *)get_json_obj(obj, field);
if (obj_value == NULL) {
break;
}
if (!cJSON_IsNumber(obj_value)) {
break;
}
ret = obj_value->valueint;
} while (0);
return ret;
}
const char *get_json_string(json_pobject obj, const char *field)
{
if (obj == NULL) {
return NULL;
}
if (field == NULL) {
return ((cJSON *)obj)->valuestring;
}
cJSON *obj_value = NULL;
const char *payload = NULL;
do {
obj_value = (cJSON *)get_json_obj(obj, field);
if (obj_value == NULL) {
break;
}
payload = cJSON_GetStringValue(obj_value);
if (payload == NULL) {
break;
}
} while (0);
return payload;
}
int32_t get_json_bool(json_pobject obj, const char *field)
{
int32_t ret = -1;
if (obj == NULL) {
return ret;
}
if (field == NULL) {
return ((cJSON *)obj)->valueint;
}
cJSON *obj_value = NULL;
do {
obj_value = (cJSON *)get_json_obj(obj, field);
if (obj_value == NULL) {
break;
}
if (!cJSON_IsBool(obj_value)) {
break;
}
if (cJSON_IsFalse(obj_value)) {
ret = 0;
}
if (cJSON_IsTrue(obj_value)) {
ret = 1;
}
} while (0);
return ret;
}
int32_t get_array_size(json_pobject obj)
{
if (cJSON_IsArray(obj)) {
return cJSON_GetArraySize(obj);
}
return -1;
}
json_pobject get_array_idx(json_pobject obj, int32_t idx)
{
if (cJSON_IsArray(obj)) {
return cJSON_GetArrayItem(obj, idx);
}
return NULL;
}
json_pobject create_json_object(void)
{
return cJSON_CreateObject();
}
void delete_json_object(json_pobject obj)
{
if (obj != NULL) {
cJSON_Delete((cJSON *)obj);
}
}
void add_item_to_object(json_pobject parent, const char *field, json_pobject obj)
{
cJSON_AddItemToObject((cJSON *)parent, field, (cJSON *)obj);
}
json_pobject add_string_to_object(json_pobject parent, const char *field, const char *value)
{
return cJSON_AddStringToObject((cJSON *)parent, field, value);
}
json_pobject add_number_to_object(json_pobject parent, const char *field, int32_t value)
{
return cJSON_AddNumberToObject((cJSON *)parent, field, value);
}
json_pobject add_bool_to_object(json_pobject parent, const char *field, int32_t value)
{
if (value == 0) {
return cJSON_AddFalseToObject((cJSON *)parent, field);
} else {
return cJSON_AddTrueToObject((cJSON *)parent, field);
}
}
json_pobject add_object_to_object(json_pobject parent, const char *field)
{
return cJSON_AddObjectToObject(parent, field);
}
char *json_to_string(json_pobject obj)
{
if (obj != NULL) {
char *ret = cJSON_PrintUnformatted(obj);
return ret;
}
return NULL;
}
void free_json_string(char *json_str)
{
FREE(json_str);
}
json_pobject add_array_to_object(json_pobject parent, const char *field)
{
return cJSON_AddArrayToObject(parent, field);
}
void add_string_to_array(json_pobject objArr, const char *value)
{
cJSON_AddItemToArray(objArr, cJSON_CreateString(value));
}
void add_number_to_array(json_pobject objArr, int32_t value)
{
cJSON_AddItemToArray(objArr, cJSON_CreateNumber(value));
}
void add_bool_to_array(json_pobject objArr, int32_t value)
{
cJSON_AddItemToArray(objArr, cJSON_CreateBool(value));
}
void add_obj_to_array(json_pobject objArr, json_pobject obj)
{
cJSON_AddItemToArray(objArr, obj);
}