分享乙個c 的json解析庫

2021-08-21 15:37:22 字數 2848 閱讀 2665

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...