c语言 - cJSON 打印函数不向对象添加数字



i开发一个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时,属性"类型"没有值。

这是内置的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和免费功能。

有什么建议?

谢谢

我更新了CJSON模块,现在正常工作。

这很有趣,我相信我知道发生了什么。抱歉,我写的错误给我带来的任何不便...

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

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

我今天在标题文件中添加了注释:如果您想避免CJSON中止任何一种情况,您的预订必须比您期望打印的JSON的63个字节长63个字节。t在预关化的缓冲区中有足够的内存。

相关内容

  • 没有找到相关文章

最新更新