簡體   English   中英

`JSONcpp` C++ 庫來修改 JSON 文件

[英]`JSONcpp` C++ library to modify JSON files

我一直在尋找 JSON C++ 庫,而JSONcpp庫似乎是最常用的。

我想用於以下問題。 基本上假設我有一個 JSON 文件,如:

{"data" : [
  {"id": 1, "val" : [
      {"id":"el1", "x": val1, "y" : val2}, 
      {"id":"el2", "x": val3, "y" : val4}
      ],
  {"id": 2, "val" : [
        {"id":"el1", "x": val5, "y" : val6},
        {"id":"el2", "x": val5, "y" : val8},
        {"id":"el3", "x": val7, "y" : val10}
  ]
  {"id": 3, "val" : [
        {"id":"el1", "x": val1, "y" : val2},
        {"id":"el2", "x": val1, "y" : val2},
        {"id":"el3", "x": val1, "y" : val2},
        {"id":"el4", "x": val1, "y" : val2},
        {"id":"el5", "x": val1, "y" : val2}
  ]
  ....
}

交互式 C++ 程序的第一次運行會生成該文件。 下次程序首先運行時,它會加載 JSON 值。 外部數組表示的列表可以通過添加元素、刪除元素或修改內部元素的相同來修改。

在每次運行時,我都想修改文件。 將元素附加到文件應該很簡單。 但是庫是否只允許修改數組的一個元素(所以只允許修改文件的某些行)? 或者每次應該/被刪除並重新創建文件?

修改文件並不是 main.js 中真正存在的概念。

操作系統不允許您從文件中的任意點“添加數據”和“刪除數據”——您只能使文件更長/更短並覆蓋其中的內容。

因此,當您認為在文本編輯器中進行復雜的修改時,它正在為您做一些奇特的事情。

C++ 不能幸免於此。 它的文件流允許您將光標放在文件中的某個點,並開始寫入數據。 這將覆蓋光標后面的任何內容。

因此,我們傾向於只加載數據,在內存中修改它,然后創建一個新文件(可能完全覆蓋舊文件),像 JsonCpp 這樣的庫也遵循這一點。

當您的文件非常大時,是的,您需要更復雜的方法來管理數據,這就是內存映射可能有用的地方。 但最終這將更多地與您如何安全地將內存映射文件視為 C++ 中的字符串有關,而不是關於如何專門處理 JSON 或 JsonCpp。

如果您的文件“非常長”以至於重新創建文件不可行,那么在內存中完全管理可能也太長了,而且對於 JSON 來說也可能太長了,因此您應該考慮一些其他存儲機制,就像一個數據庫。

暫無
暫無

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

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