簡體   English   中英

如何在 C 中編碼 JSON 緩沖區?

[英]How to encode JSON buffer in C?

我需要一些建議。

我從模擬端口上的傳感器收集數據,並維護讀數數據。 然后我將這些數據格式化為 json 樣式格式,然后將其發送到雲端。 現在,我將用於將各種值格式化為 json 的特定代碼被保存,當然不是在字符串中,而是在使用 int sprintf ( char * str, const char * format, ... ) 的字符數組中; 方法。 這是我使用此代碼的例程:

void StackData() {
    char buff[256];              

    sprintf(buff, "{\"id\":\"stat\",\"minHour\":%1i,\"maxHour\":%2i,\"minDay\":%3i,\"maxDay\":%4i,\"inHour\":%5lu,\"iinDay\":%6lu,\"inWeek\":%7lu}",
            minHour, maxHour, minDay, maxDay, AmpsHour, AmpsDay, AmpsWeek);
}

我想看看其他人如何以不同的方式做到這一點,或者這是通過使用特定庫來做到這一點的另一種方式?

PS:我已經成功使用coreJSON庫解析JSON輸入

您所擁有的是合理的,盡管替代方案可能是某種結果生成器:

char buff[256] = { 0 }

jsonObjectOpen(buff);
jsonObjectInteger(buff,"minHour", minHour);
jsonObjectInteger(buff,"maxHour", maxHour);
jsonObjectClose(buff);

基本上每個函數都將必要的 json 元素附加到緩沖區,並且您需要為每種數據類型(字符串、整數、浮點數)實現函數,當然,請確保以正確的順序使用。

我不認為這更簡潔,但是如果您多次這樣做,尤其是對於更復雜的結構,您可能會發現它更具可讀性和可維護性。

完全有可能存在一個現有的庫來幫助這種類型的方法,同時還要注意確保在構建過程中不超過緩沖區空間。

在其他具有類型檢測的語言中,這要容易得多,我想你總是可以有一個函數,它需要一個 void 指針和一個“類型”枚舉,但為了稍微簡單一點,這可能更容易出錯API。

將 JSON 對象構建與編碼分開可能是個好主意。

現有的 JSON C 庫之一通過以下方式執行此操作:

json_t *item = json_object();
json_object_set_new(item, "id", json_string("stat"));
json_object_set_new(item, "minHour", json_integer(minHour));
json_object_set_new(item, "maxHour", json_integer(maxHour));
...


// Dump to console
json_dumpf(item, stdout, JSON_INDENT(4) | JSON_SORT_KEYS);

// Dump to file 
json_dumpf(item, file, JSON_COMPACT);
    
// Free allocated resources
json_decref(item);

分離帶來一些好處。 例如,可以在一處選擇編碼格式。
並且同一個對象可以很容易地以多種方式編碼(如示例中所示)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM