【发布时间】:2017-03-15 14:29:31
【问题描述】:
我开发了一个 C 嵌入式软件,它构建一个带有多个参数(字符串和整数)的 JSON 字符串。出于我的目的,我使用了 cJSON )将来我需要解析复杂的 JSON)。
我使用以下代码构建我的 json:
jsonObject = cJSON_CreateObject();
cJSON_AddNumberToObject( jsonObject, "Version", 1 );
cJSON_AddStringToObject( jsonObject, "ID", "xyz" );
cJSON_AddStringToObject( jsonObject, "Local", "1234" );
cJSON_AddNumberToObject( jsonObject, "Type", 1 );
cJSON_AddStringToObject( jsonObject, "Message", "Hello" );
接下来我将 JSON 打印到动态缓冲区中:
cJSON_PrintPreallocated( jsonObject, *jsonMessage, *jsonMessageLen, 0 )
当我在终端上可视化 jsonMessage 时,属性“Type”没有值。
这是构建的json:
{"Version":1,"ID":"xyz","Local":"123","Type":,"Message":"Hello"}
我尝试使用不同的打印方法,例如我使用过:
CJSON_PUBLIC(char *) cJSON_PrintBuffered(const cJSON *item, int prebuffer, cJSON_bool fmt)
并且 JSON 已正确构建。问题是我需要自己分配内存而不是使用 cJSON_PrintBuffered。这是因为我不能使用 malloc 和 free 函数。
有什么建议吗?
谢谢
【问题讨论】:
-
使用json-c which is solid as a rock,使用简单。这可能是 cJSON 库中的错误。
-
我需要一个用于嵌入式系统的轻量级库。是吗?
-
是的,事实上非常轻量级。它速度快,应用广泛。
-
我可以添加 *.c 和 *h 文件还是需要添加编译版本?
-
您可以从 github 下载源代码,如果您知道如何编译,可以使用您的代码进行编译。这并不难,只是几个文件。 Just click the link