lua中的cjson擴充套件一直是比較好用的json處理擴充套件,但是在處理數字索引時對於索引下標不連續的悉數陣列確有一些特殊的處理方式。
在預設情況下只要不連續的數量少於10就會被null填補上,但最大索引大於10或最大索引大於陣列數量一倍時就會丟擲「cannot serialise table: excessively sparse array」。
這是由於cjson處理稀疏陣列時有乙個安全處理的條件具體可以檢視lua-cjson的文件3.11
通過cjson.encode_sparse_array()可以檢視到當前的對應配置值
例如,預設情況下:
print(cjson.encode_sparse_array())
輸出:false2 10
這裡返回的三個引數分別表示為:極度稀疏陣列(excessively sparse array)是否轉為字串索引,最大索引號與元素數量的安全比例,超出安全比例時最大索引值上限。
cjson.encode_sparse_array(true)
print(cjson.encode())
將輸出:
而如果將比例設為0:
cjson.encode_sparse_array(false, 0)
print(cjson.encode())
將輸出:[null,null,null,null,null,null,null,null,null,null,"data"]
正確的設定引數後將避免excessively sparse array異常出現的問題
稀疏陣列的用途
對於二維陣列中如果有多數資料為相同的值,少數為有效值的陣列,可以通過稀疏陣列進行重新儲存,較少空間占用,後面可以通過這個稀疏陣列恢復之前的二維陣列 稀疏陣列的arrays 0 0 儲存行的數量 arrays 0 1 儲存列的數量 arrays 0 2 儲存有效值的數量 arrays 1 0 儲存第乙...
稀疏陣列的實現
當陣列中大部分的內容值都未被使用 或都為零 在陣列中僅有少部分的空間使用,造成記憶體空間的浪費。為了節省記憶體空間,並且不影響陣列中原有的內容值,我們可以使用稀疏陣列去壓縮資料。稀疏陣列的處理方法是 記錄陣列一共有幾行幾列,有多少個不同的值。把具有不同值的元素的行列及值記錄在乙個小規模的陣列中,從而...
cJSON的簡單應用(json物件 陣列)
cjson 結構 typedef struct cjson cjson object item array 都是乙個cjson物件 json讀入 1.建立json根物件將json字串解析到跟物件 2.從跟物件中獲取item item可能是 item object array 1 item 直接通過i...