C 的Json解析庫 jsoncpp和boost

2021-08-29 03:55:30 字數 1461 閱讀 7086

解析json

解析一段下面的資料:

,      ]}int parsejson(),]}」;  using namespace boost::property_tree;   std::stringstream ss(str);  ptree pt;  try  catch(ptree_error & e)    try  }  catch (ptree_error & e)    return 0;}

構造json

int insertjson(),]}」;  using namespace boost::property_tree;   std::stringstream ss(str);  ptree pt;  try  catch(ptree_error & e)    // 修改/增加乙個key-value,key不存在則增加  pt.put(「upid」, 「00001」);   // 插入乙個陣列  ptree exif_array;  ptree array1, array2, array3;  array1.put(「make」, 「nikon」);  array2.put(「datetime」, 「2011:05:31 06:47:09」);  array3.put(「software」, 「ver.1.01」);  exif_array.push_back(std::make_pair("", array1));  exif_array.push_back(std::make_pair("", array2));  exif_array.push_back(std::make_pair("", array3)); //   exif_array.push_back(std::make_pair(「make」, 「nikon」));//   exif_array.push_back(std::make_pair(「datetime」, 「2011:05:31 06:47:09」));//   exif_array.push_back(std::make_pair(「software」, 「ver.1.01」));   pt.put_child(「exifs」, exif_array);  std::stringstream s2;  write_json(s2, pt);  std::string outstr = s2.str();   return 0;}

三. 兩種解析庫的使用經驗

用boost::property_tree解析字串遇到"/"時解析失敗,而jsoncpp可以解析成功,要知道』/『前面加乙個』'是json標準格式。

boost::property_tree的read_json和write_json在多執行緒中使用會引起崩潰。

針對1,可以在使用boost::property_tree解析前寫個函式去掉"/"中的』』,針對2,在多執行緒中同步一下可以解決。

我的使用心得:使用boost::property_tree不僅可以解析json,還可以解析xml,info等格式的資料。對於解析json,使用boost::property_tree解析還可以忍受,但解析xml,由於遇到問題太多只能換其它庫了

JSON庫解析json檔案

cocoa 下json開源的類庫有很多,其中jsonkit庫是非常簡單易用而且效率又比較高的。解析 舉例 import jsonkit.h 假設 strjson 是網路上接收到的 json 字串,nsstring strjson bage 3,sound def.nsdictionary resul...

json 物件的解析c

string getuserobj wxgetweb.pushtoweb getuserxx 返回json 格式的字元物件如下 using newtonsoft.json 先引入這兩個命名空間 using newtonsoft.json.converters object obj new objec...

C 解析Json的類

以下資料解析成.net可以使用的資料,返回的資料除了header,其他的都是可變的,也就是說結構不是固定的。完全由使用者選擇,所以選擇了生成datatable。json資料格式如下 dataset fielddefine data 解析的類 using system using system.col...