我使用cJson爲C,到嵌入式平臺,打造這樣一個JSON的長度:cJson如何計算打印緩衝區
{"ProtocolVersion":1,"ID":"123","Zone":"xyz","MessageType":42,"Message":"Json payload MSG #6"}
要做到這一點我用cJson提供了這個功能:
jsonObject = cJSON_CreateObject();
/* Add Protocol Version */
cJSON_AddNumberToObject(jsonObject, "ProtocolVersion", 1);
/* Add Machine Id */
cJSON_AddStringToObject(jsonObject, "ID", idStr);
/* Add Market */
cJSON_AddStringToObject(jsonObject, "Zone", xyzStr);
/* Add Message Type */
cJSON_AddNumberToObject(jsonObject, "MessageType", typeNum);
/* Add Message */
cJSON_AddStringToObject(jsonObject, "Message", msgStr);
要創建我利用的功能的JSON:
cJSON_PrintPreallocated(jsonObject, *jsonMessage, *jsonMessageLen, 0);
我寧願傳給cJson我的應用A預分配的緩衝區n和我基本上通過總和每個Key和Object的長度來計算緩衝區長度。
例如:strlen的( 「區」)+的strlen(xyzStr)+ ... +的 「」 +數量的{}數+數量,+的數量:
這樣我獲得我的JSON的確切長度。
不幸的是,函數「cJSON_PrintPreallocated」由於不正確的緩衝區長度(它似乎很短)而失敗。
如果我添加一個額外的30字節到我的「jsonMessage」一切正常。
我在哪裏錯了?
哪個是計算cJson所需緩衝區長度的最佳方法?
謝謝!
仔細思考如何構建JSON。它不是_just_鍵和值,以及各種分隔符。打開示例JSON文檔,查看除鍵和值以外的其他字符可以在哪裏。 –
另外,爲什麼'jsonMessageLen'是一個指針?如果不是,則需要打開警告,因爲您試圖將該值作爲非指針。 –
使用使用指向jsonMessageLen的指針,因爲我動態分配jsonMessage。 – Federico