cJSON 打印功能不会将数字添加到对象

cJSON print function doesn't add number to object

我正在开发一个 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 )

当我在终端上可视化 json 消息时,属性 "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 函数。

有什么建议吗?

谢谢

我更新了 cJSON 模块,现在可以正常工作了。

这有点意思,我相信我知道是怎么回事了。对于我写那个错误给您带来的任何不便,我们深表歉意...

在 1.4.0 版本中,我向 cJSON 引入了一个错误,即打印数字的函数在无法分配足够内存时不会失败。

print_number 将尝试在打印数字之前分配 64 字节的内存,因为它不知道 sprintf 需要多少字节,并且 snprintf 在 ANSI 中不可用C. 您的预分配缓冲区可能不够长,无法容纳 64 个字节,因此它没有打印第一个,但随后继续正常打印 JSON 的其余部分,因为它没有失败(错误) .

我今天在头文件中添加了一条注释:如果你想避免任何类型的错误情况,你的预分配必须比你期望的打印 json 长 63 字节 json =21=] 中止,因为它认为预分配缓冲区中没有足够的内存。