69,368
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
#include <json-c/json.h>
#include <string.h>
//该函数用于接收一个json格式的字符串,转换成json_object格式
//参数为字符串、字符串长度、要返回的json_object对象
//成功返回0,失败返回-1
//注意josn如果获取成功将在函数内部开辟存储空间,不要忘记在函数外面释放空间
int string_to_json(char *string, unsigned long len, json_object **json)
{
json_tokener *tok = json_tokener_new();//创建一个json_tokener对象,以便进行转换,记得要释放
enum json_tokener_error jerr;
do
{
*json = json_tokener_parse_ex(tok, string, len);
}while((jerr = json_tokener_get_error(tok)) == json_tokener_continue);
if(jerr != json_tokener_success || tok->char_offset < (int)len)
{
json_tokener_free(tok);
return -1;
}
if(json_object_get_type(*json) == json_type_object)
{
json_tokener_free(tok);
return 0;
}
json_tokener_free(tok);
return -1;
}
int main()
{
char json[65535] = {0};
FILE * json_file;
json_file = fopen("/home/han/桌面/tempro/json/json.txt","r");
if(json_file == NULL)
{
printf("shibai \n");
return -1;
}
fread(json, 65535, 1, json_file);
//printf("%s",json);
json_object *new_json = NULL;
unsigned long len = strlen(json);
json_object *new_field = NULL;
if(string_to_json(json, len, &new_json) == 0)
{
const char *str = json_object_get_string(new_json);
printf("转换成功的json为:\n%s\n",str);
new_field = json_object_new_string("周杰伦");
json_object_object_add(new_json, "最爱的歌手", new_field);
printf("\n\n添加后的json为:\n%s\n",str);
}
if(json_object_get_type(new_json) != json_type_null)
{
printf("释放空间\n");
json_object_put(new_json);
}
const char *after_put = json_object_get_string(new_field);
printf("竟然还存在:%s\n",after_put);
return 0;
}