我自己写的一个json解析器,使用c++语言
我近来想要写一个天气预报的软件,想了想决定用c++语言开发。可是我申请的数据端口返回的是json文件。我发现似乎c++没有什么好用的json文件解析器,于是决定自己写一个。
把json_parsing.hpp文件下载到你的项目里直接包含就行了
首先,你需要把一个json文件转成std::string,然后使用 json_object类来初始化一个json对象。
例:
json_object obj("{\"name\":\"gkgfu\",\"age\":\"unknow\"}");
在json中,一个对象有很多个属性。在我的项目里,我使用 json_property 类来存放单个的属性。
例:
json_property property("\"age\":12");
当然,我们不会直接用构造函数来设置一个属性。我们可以使用json_property类中的getProperties()这一成员函数来获取一个json对象的属性。需要注意的是,它返回的是一个vector容器。
例:
std::vector<json_property> properties = obj.getProperties();
json_property property = properties.at(0);
在json中,一个属性包含一个key与一个value。
对于key值,由于其都是一个字符串,因此你都可以用json_property中的getKey()这一成员函数来获取。该成员函数的返回值是std::string。
例:
std::string key = property.getValue();
对于value值,因为它可能拥有不同的类型,因此我设计了一个value_object类来保存value值。它能够通过类型转换直接转换为c++里拥有的类型与我设计的json_object类以及下文将要提到的json_array类。它们分别对应了json里的对象与数组。类似的,你可以使用json_property中getValue()这一成员函数来获取它
例:
value_object val = property.getValue();
std::cout<<"age : "<<(int)(val.getValue())<<std::endl;//假定property中保存的是"age":12
在我的项目里,为数组设计了一个类json_array。你可以使用它的getArray()这一成员函数来获取一个类型为value_object的vector数组。
例:
json_object obj("{\"score\":[100,99,60]}");
json_property property = obj.getProperties().at(0);
json_array array = property.getValue();//自动类型转换
std::vector<value_object> scores = array.getArray();
int score1 = scores.at(0);
std::cout<<score1<<std::endl;