打印

C++使用JSON来解析数据(转)

[复制链接]
1257|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
keer_zu|  楼主 | 2014-12-17 13:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 keer_zu 于 2014-12-17 15:26 编辑

C++要使用JSON来解析数据,一般采用jsoncpp.

网站:http://sourceforge.net/projects/jsoncpp/

下载了之后,解压,然后打开\jsoncpp-src-0.5.0\jsoncpp-src-0.5.0\makefiles\vs71

下的工程文件,进行编译链接就可以得到一个静态链接库json.lib

要用jsoncpp只需要将这个lib文件拷贝到你的工程目录下,并将jsoncpp-src-0.5.0\jsoncpp-src-0.5.0\include\json

复制到工程目录下,然后将这些头文件加到工程中去就可以了。

例子:

{
"name" : "小楼一夜听春雨",
"age" : 27
}


#pragma comment(lib, "json_mtd.lib")

#include <fstream>
#include <cassert>
#include "json/json.h"

int main()
{
    ifstream ifs;
    ifs.open("testjson.json");
    assert(ifs.is_open());

    Json::Reader reader;
    Json::Value root;
    if (!reader.parse(ifs, root, false))
    {
        return -1;
    }

    std::string name = root["name"].asString();
    int age = root["age"].asInt();

    std::cout<<name<<std::endl;
    std::cout<<age<<std::endl;

    return 0;
}
  

[{"name" : "xiaoy", "age" :17} , {"name" : "xiaot", "age" : 20}]


#pragma comment(lib, "json_mtd.lib")

#include <fstream>
#include <cassert>
#include "json/json.h"

int main()
{
    ifstream ifs;
    ifs.open("testjson.json");
    assert(ifs.is_open());

    Json::Reader reader;
    Json::Value root;
    if (!reader.parse(ifs, root, false))
    {
        return -1;
    }

    std::string name;
    int age;
    int size = root.size();
    for (int i=0; i<size; ++i)
    {
        name = root["name"].asString();
        age = root["age"].asInt();

        std::cout<<name<<" "<<age<<std::endl;
    }

    return 0;
}
  

json写入:


#pragma comment(lib, "json_mtd.lib")

#include <fstream>
#include <cassert>
#include "json/json.h"


int main()
{
    Json::Value root;
    Json::FastWriter writer;
    Json::Value person;

    person["name"] = "hello world";
    person["age"] = 100;
    root.append(person);

    std::string json_file = writer.write(root);


    ofstream ofs;
    ofs.open("test1.json");
    assert(ofs.is_open());
    ofs<<json_file;

    return 0;
}
结果:[{"age":100,"name":"hello world"}]



json对数组的解析还支持STL的风格。即

复制代码
Json::Value::Members member;//Members 这玩意就是vector<string>,typedef了而已
for (Json::Value::iterator itr = objArray.begin(); itr != objArray.end(); itr++)
{
member = (*itr).getMemberNames();
for (Json::Value::Members::iterator iter = member.begin(); iter != member.end(); iter++)
{
string str_temp = (*itr)[(*iter)].asString();
}
}
复制代码
此种风格与上面的类似,只是上面的只是取"text"节点,而后一种是输出所有节点。

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:qq群:49734243 Email:zukeqiang@gmail.com

1352

主题

12436

帖子

53

粉丝