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=] 中止,因为它认为预分配缓冲区中没有足够的内存。
我正在开发一个 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=] 中止,因为它认为预分配缓冲区中没有足够的内存。