7月25日更新:新增關於如何讀取json的值的內容。
先貼上**哈~
來自github:lxjson - a ****** json library in cpp
附:json是什麼?怎麼用啊?如何驗證我寫的json是否正確啊?
有以下幾點是我認為它的優勢所在:
explicit json() noexcept;
explicit json(std::nullptr_t) noexcept;
explicit json(double);
explicit json(int);
explicit json(bool);
explicit json(const
std::string&);
explicit json(std::string&&);
explicit json(const
char*);
explicit json(const
array&);
explicit json(array&&);
explicit json(const object &);
explicit json(object &&);
std::string test = r"(["
a",123,[true,false,null]])"
;
這個json庫的原作者已經將一些函式的使用方法寫的很好了,在這裡略加補充一些。
先鋪墊一下作者官方給出的建構函式範例:
json j_arr = json(json::array);
json j_obj(json::object ,,,
});
作者將json資訊處理成一張map,畢竟json的屬性可以作為key,而值作為value,一起存到map中。json和map可以認為是等效的。我們來看看作者對json的實現:
using object = std::map
;
其中的object是json的成員,用於儲存json資訊。此外,json裡的陣列可以等效為乙個容器vector:
using
array = std::vector
;
這種處理可以使json陣列和json物件在書寫建構函式時可以方便快捷地直接使用{}進行列舉(與vector和map一致)。
不過,當我一開始使用這個json庫時,遇到了一些困難:當json陣列和json物件中元素個數不確定時,這種寫法就不靈了。幸而注意到它們與vector、map等效,完全可以沿用c++中熟悉的vector和map的有關用法。簡單地給個例子。
string key;
intvalue;
json::object jsonobject;
while(cin>>key>>value)
//到這裡jsonobject已經讀取完成,下一步是構造成json返回
return json(json::object,
,});
int
value;
json::array jsonarray;
while (cin >> value)
return json(json::object,
,});
當然,我們熟悉的map和vector中的其他成員,如erase()等,均可運用在json::object和json::array中。
至於序列化和反序列化,原作者寫的文案已經寫得很好了,我就直接搬過來了。
j_obj.serialize(out_obj);
std:
:cout
<< out_obj << std:
:endl;
//
std::string err_com;
json ret = json::parse(out_obj, err_com);
if (err_com.size())
json11_test_assert(ret
.is_object());
嗯,先寫這麼多。如果以後有更多心得會繼續補充。
7.25更新內容:
忘了寫乙個很重要的內容,就是如何讀取json的值。其實很簡單,對於乙個json型別的物件json,採用以下函式獲取對應的值:
json.object_value()
json.array_value()
json.int_value()
json.double_value()
json.string_value()
json.bool_value()
具體選擇何種取決於構造或解析json時的資料型別。需要注意的是,當獲取的型別與json的型別不匹配時,程式會報錯。因此,在一些無法確定資料型別的情況下,判斷型別即為必要。
型別的判斷可以採用成員type()函式,其返回值是自定義的enum型別:
enum
class
jsontype ;
也可以採用以下成員函式進行判斷:
bool is_null() const;
bool is_number() const;
bool is_bool() const;
bool is_string() const;
bool is_array() const;
bool is_object() const;
乙個好用的C 的json庫
此文首發於我的個人部落格 乙個好用的c 的json庫 zhang0peter的個人部落格 sudo apt get install libjsoncpp dev sudo ln s usr include jsoncpp json usr include json這個庫最大的優點是只要包含乙個庫檔案...
乙個C 解析HTML的庫
http協議使用廣泛,相應的,c 在這塊需求也開始增加。乙個好的解析庫可以達到事半功倍的效果,在此貼出我的解析庫的 方便新手朋友們使用。重點說說這個庫的使用方法,我就說說 hhtmlparse getlocalip 則函式的實現,方法大多類似。1 字串定義 std string page,match...
js解析JSON串的乙個小坑
今天寫ajax時,像平常一樣用jsonobject新增key,value,然後tostring返回到前台 在success方法中使用data.key並不能拿出來值,請教了公司的前端之後才明白,json在前台 有兩種方式來取資料 1.json.parse jsonstr key 2.json.pars...