jsoncpp 订阅
JsonCpp
信息
操作系统
跨平台
开发语言
C/C++
开源协议
Public Domain
JsonCpp
JsonCpp 是一个 C++ 用来处理 JSON 数据的开发包。
收起全文
精华内容
下载资源
问答
  • jsoncpp

    2020-12-05 15:12:47
    http://jsoncpp.sourceforge.net/LICENSE

    http://jsoncpp.sourceforge.net/LICENSE
    Jsoncpp是个跨平台的开源库https://sourceforge.net/projects/jsoncpp/

    展开全文
  • JsonCpp

    2018-04-23 17:21:54
    JsonCpp 的使用JSON全称为JavaScript ObjectNotation,它是一种轻量级的数据交换格式,易于阅读、编写、解析。jsoncpp是c++解析JSON串常用的解析库之一。jsoncpp中主要的类:Json::Value:可以表示所有支持的类型,...

    JsonCpp 的使用

    JSON全称为JavaScript ObjectNotation,它是一种轻量级的数据交换格式,易于阅读、编写、解析。jsoncpp是c++解析JSON串常用的解析库之一。

    jsoncpp中主要的类:

    Json::Value:可以表示所有支持的类型,如:int , double ,string , object, array等。其包含节点的类型判断(isNull,isBool,isInt,isArray,isMember,isValidIndex等),类型获取(type),类型转换(asInt,asString等),节点获取(get,[]),节点比较(重载<,<=,>,>=,==,!=),节点操作(compare,swap,removeMember,removeindex,append等)等函数。
    Json::Reader:将文件流或字符串创解析到Json::Value中,主要使用parse函数。Json::Reader的构造函数还允许用户使用特性Features来自定义Json的严格等级。
    Json::Writer:与JsonReader相反,将Json::Value转换成字符串流等,Writer类是一个纯虚类,并不能直接使用。在此我们使用 Json::Writer 的子类:Json::FastWriter(将数据写入一行,没有格式),Json::StyledWriter(按json格式化输出,易于阅读)

     

    JsonCpp使用注意点:

    1.对不存在的键获取值会返回此类型的默认值。
    2.通过key获取value时,要先判断value的类型,使用错误的类型获取value会导致程序中断。
    3.获取json数组中某一项key的value应该使用value[arraykey][index][subkey]获取或循环遍历数组获取。
    4.append函数功能是将Json::Value添加到数组末尾。

    5.由于Jsoncpp解析非法json时,会自动容错成字符类型。对字符类型取下标时,会触发assert终止进程。
    解决方法:启用严格模式,让非法的json解析时直接返回false,不自动容错。这样,在调用parse的时候就会返回false。

    Json::Reader *pJsonParser = new Json::Reader(Json::Features::strictMode());

     

    判断json字符串中是否存在某键值的几种方法:

    1.value.isMember("key");    //存在返回true,否则为false
    2.value["sex"].isNull();    //为NULL返回1,否则为0

     

    JsonCpp读写示例代码:

    复制代码
    #include <iostream>
    #include <sstream>
    #include <fstream>
    #include <json/json.h>
    
    void readJsonFromFile()
    {
        std::ifstream ifs;
        ifs.open("a.json");
        std::stringstream buffer;
        buffer << ifs.rdbuf();
        ifs.close();
    
        auto str = buffer.str();
    
        Json::Reader reader;
        Json::Value value;
        if (reader.parse(str, value)) {
            //节点判断
            std::cout << "value's empty:" << value.empty() << std::endl;
            std::cout << "name is string:" << value["name"].isString() << std::endl;
            std::cout << "age is string:" << value["age"].isString() << std::endl;
    
            //类型获取
            std::cout << "name's type:" << value["name"].type() << std::endl;
            std::cout << "like's type:" << value["like"].type() << std::endl;
    
            //类型转换
            //根据Key获取值时最好判断类型,否则解析会中断
            std::cout << "name:" << value["name"].asString() << std::endl;
            std::cout << "age:" << value["age"].asInt() << std::endl;
    
            //节点获取
            std::cout << value["job"] << std::endl;                        //[]方式获取
            std::cout << value.get("name", "dxx") << std::endl;            //get方式获取
            std::cout << value.isMember("job") << std::endl;
            std::cout << "value's obj:" << value.isObject() << std::endl;
            std::cout << "like's obj:" << value["like"].isObject() << std::endl;
    std::cout
    << "like.size:" << value["like"].size() << std::endl; std::cout << "like[0][food]:" << value["like"][0]["food"].asString() << std::endl; //节点操作 std::cout << "name compare age:" << value["name"].compare("age") << std::endl; value["name"] = "swduan"; //修改 value["address"] = "hz"; //增加 value["phone"] = "10086"; value.removeMember("age"); //删除 value["like"][0]["sport"] = "game"; //往value["like"]中添加一项元素 Json::Value item; item["hate"] = "game"; value["like"].append(item); //value["like"]中再添加一维数组 std::cout << "value[\"like\"]'s size:" << value["like"].size() << std::endl; std::cout << "--------------------" << std::endl; std::cout << value.toStyledString() << std::endl; std::cout << "--------------------" << std::endl; auto all_member = value.getMemberNames(); for (auto member : all_member) { std::cout << member << std::endl; } std::cout << "--------------------" << std::endl; value.clear(); //清空元素 std::cout << value.toStyledString() << std::endl; } } void jsonWriteToFile() { Json::FastWriter write; Json::Value root; Json::Value item; Json::Value arrayObj; item["book"] = "c++"; item["food"] = "apple"; item["music"] = "ddx"; arrayObj.append(item); root["name"] = "dsw"; root["age"] = 18; root["like"] = arrayObj; //注意:这里不能用append,append功能是将Json::Value添加到数组末尾 auto str = root.toStyledString(); std::cout << str << std::endl; std::ofstream ofss; ofss.open("a.json"); ofss << str; ofss.close(); } int main() { jsonWriteToFile(); readJsonFromFile(); getchar(); return 0; }
    复制代码

    输出:

    复制代码
    value's empty:0
    name is string:1
    age is string:0
    name's type:4
    like's type:6
    name:dsw
    age:18
    null
    "dsw"
    1
    value's obj:1
    like's obj:0
    like.size:1
    like[0][food]:apple
    name compare age:1
    value["like"]'s size:2
    --------------------
    {
       "address" : "hz",
       "job" : null,
       "like" : [
          {
             "book" : "c++",
             "food" : "apple",
             "music" : "ddx",
             "sport" : "game"
          },
          {
             "hate" : "game"
          }
       ],
       "name" : "swduan",
       "phone" : "10086"
    }
    
    --------------------
    address
    job
    like
    name
    phone
    --------------------
    {}
    
    

    示例1 从文件中读取json文件并解析


    首先我们提供一个json文件,这里命名为"checkjson.json",其中数据如下:

    {
        "name" : "tocy",
        "age" : 1000
    }

    这里面保存的是最简单的object,我们可以使用下面代码将其读入并解析:

    void demo_simple()
    {
        ifstream ifs;
        ifs.open("checkjson.json");
        assert(ifs.is_open());
     
        Json::Reader reader;
        Json::Value root;
        if (!reader.parse(ifs, root, false))
        {
            cerr << "parse failed \n";
            return;
        }
     
        string name = root["name"].asString(); // 实际字段保存在这里
        int age = root["age"].asInt(); // 这是整型,转化是指定类型
    }

    这里是简单的map访问,然后直接读取对应字段即可。

    示例2 从内存中读取json数据(object)


    我们在内存中定义一段json数据,然后解析,这次我们在json中添加内嵌array的object。代码如下:

    void demo_parse_mem_object()
    {
        const char json_data[] = 
            "{\"name\" : \"Tocy\", \"salary\" : 100, \"msg\" : \"work hard\", \
            \"files\" : [\"1.ts\", \"2.txt\"]}";  
    
        Json::Reader reader;
        Json::Value root;
        // reader将Json字符串解析到root,root将包含Json里所有子元素  
        if (!reader.parse(json_data, json_data + sizeof(json_data), root))
        {
            cerr << "json parse failed\n";
            return;
        }
        
        cout << "demo read from memory ---------\n";
        string name = root["name"].asString();
        int salary = root["salary"].asInt();
        string msg = root["msg"].asString();
        cout << "name: " << name << " salary: " << salary;
        cout << " msg: " << msg << endl;
        cout << "enter files: \n";
        Json::Value files = root["files"]; // read array here
        for (unsigned int i = 0; i < files.size(); ++i)
        {
            cout << files[i].asString() << " ";
        }
        cout << endl << endl;
    }

    示例3 从内存中解析json数据(array)


    这次我们从提供一个以array封装的json数据,解析逻辑如下:

    void demo_parse_mem_array()
    {
        const char json_data[] = 
            "[{\"name\" : \"Tocy\", \"salary\" : 100}, {\"name\" : \"Kit\", \"salary\" : 89}, \
            \"a json note\"]";  
    
        Json::Reader reader;
        Json::Value root;
        // reader将Json字符串解析到root,root将包含Json里所有子元素  
        if (!reader.parse(json_data, json_data + sizeof(json_data), root))
        {
            cerr << "json parse failed\n";
            return;
        }
        
        cout << "demo read from memory using array---------\n";
        unsigned int count = root.size() - 1;
        for (unsigned int i = 0; i < count; ++i)
        {
            string name = root[i]["name"].asString();
            int salary = root[i]["salary"].asInt();
            cout << "name: " << name << " salary: " << salary << endl;
        }
        cout << "last msg: " << root[count].asString() << endl;
        cout << endl << endl;
    }

    示例4 简单json数据封装

    前面三个是关于json数据解析的例子,下面是关于json数据封装的例子。
    首先我们生成示例1的数据,代码如下:

    void demo_write_simple()
    {
        Json::Value root;
        Json::FastWriter writer;
        Json::Value person;
     
        person["name"] = "tocy";
        person["age"] = 1000;
        root.append(person);
     
        string json_file = writer.write(root);
    
        cout << "demo write json ==============\n";
        cout << json_file << endl;
    }

    示例5 json封装-内嵌array的object

    首先我们生成示例2的数据,代码如下:

    void demo_write_object()
    {
        Json::Value root;
        Json::FastWriter writer;
     
        root["name"] = "tocy";
        root["salary"] = 100;
        root["msg"] = "work hard";
        Json::Value files;
        files[0] = "1.ts";
        files[1] = "2.txt";
        root["files"] = files;
     
        string json_file = writer.write(root);
        cout << "demo write json object ==============\n";
        cout << json_file << endl;
    }

    示例6 json封装-内嵌object的array

    首先我们生成示例3的数据,代码如下:

    void demo_write_array()
    {
        Json::Value root;
        Json::FastWriter writer;
    
        {
            Json::Value person; 
            person["name"] = "Tocy";
            person["salary"] = 100;
            root[0] = person;
        }
        
        {
            Json::Value person; 
            person["name"] = "Kit";
            person["salary"] = 89;
            root[1] = person;
        }
        
        root[2] = "a json note";   
     
        string json_file = writer.write(root);
        cout << "demo write json ==============\n";
        cout << json_file << endl;
    }

    复制代码
    posted @ 2017-04-07 16:18 滴水瓦 阅读(1861) 评论(0编辑 收藏
    展开全文
  • jsonCpp

    2018-11-29 14:23:06
    jsoncpp遇到 error C4996: 'Json::Reader': Use CharReader and CharReaderBuilder instead 解决办法: 在引用"json/json.h"之前定义 #if defined(_MSC_VER) &amp;&amp; _MSC_VER &gt;= ...

    jsoncpp遇到

    error C4996: 'Json::Reader': Use CharReader and CharReaderBuilder instead	
    

    解决办法:
    在引用"json/json.h"之前定义

    #if defined(_MSC_VER) && _MSC_VER >= 1310
    #pragma warning(disable : 4996) // disable fopen deprecation warning
    #endif
    
    展开全文
  • JSONCPP

    2012-08-30 15:57:55
    在网上下载JSONCPP后解压,会发现JSONCPP已经出来得很完善:头代码放在include/json,源文件放在src/lib_json。打开makefiles/vs71/jsoncpp.sln 即可开始进行编译。 4.源码使用 源码中,最主要的、使用最频繁的...

    在游戏开发中,经常要用到JSON格式。

    1.JSON介绍
    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C,C++,C#,Java,JavaScript,Perl,Python等)。这些特性使JSON成为理想的数据交换语言。

    2.JSON几种形式
    JSON用于描述数据结构,有几下几种形式存在:
    a.对象:对象用花括号括起来。一个对象包含一系列非排序的“名称/值”对,每个“名称/值”对之间使用逗号分割。

    b."名称/值"对:名称和值之间使用冒号隔开。名称为字符串,值可以是字符串,也可以是数值、对象、布尔值、有序列表、null值。

    c.有序列表:一个或者多个值用逗号分割后,使用方括号括起来就形成了这样的列表。

    d.字符串:以""括起来的一串字符。

    e.数值:0-9的数字组合,可以为负数或者小数。还可以用“e”或者“E”表示为指数形式。

    f.布尔值:true或者false。

    3.JSON代码
    JSON的解析库有C++、VB、Java等各种语言。本文介绍JSONCPP。
    在网上下载JSONCPP后解压,会发现JSONCPP已经出来得很完善:头代码放在include/json,源文件放在src/lib_json。打开makefiles/vs71/jsoncpp.sln 即可开始进行编译。

    4.源码使用
    源码中,最主要的、使用最频繁的三个类分别是:Value、Reader、Writer。

    展开全文
  • JsonCpp JSON is a lightweight data-interchange format. It can represent numbers, strings, ordered sequences of values, and collections of name/value pairs. JsonCpp is a C++ library that allows ...
  • jsoncpp源码

    2017-04-18 09:24:58
    jsoncpp源码是从git上面克隆下来 克隆地址:https://github.com/open-source-parsers/jsoncpp.git
  • jsoncpp安装包

    2018-08-01 17:47:01
    含有源码,已经配置好的win32情况下的jsoncpp,在工程里可以直接调用!!
  • Update JsonCPP

    2021-01-09 04:07:44
    <div><p>This updates JsonCpp to latest version. The version we currently using has a problem that crashes cmake 3.4 under windows. Updating JsonCpp fixes the problem. I had to fix a few errors from ...
  • jsoncpp 1.8.4

    2018-12-12 14:52:51
    jsoncpp1.8.4 修改对json项大小写敏感的比较,可自定义选择是否需要大小写敏感 修改json输出自动排序的规则,可自定义选择是否需要自动排序 新增json无格式化输出方法
  • JsonCpp 源码

    2017-11-29 16:47:33
    C++Json解析库:JsonCpp源码,即可自己编辑lib,也可研究使用源码。
  • jsoncpp-0.y.z.zip

    2020-02-25 17:06:54
    jsoncpp
  • C++ JsonCpp

    2020-05-27 19:22:56
    使用Jsoncpp包中的.cpp和.h文件(VS2013----jsoncpp-src-0.5.0)JsonCpp里的几个类JsonCpp用法(链接) JsonCpp的下载与使用 Json官网上有各种语言关于Json的解析库。 从这个里面下载JsonCpp: ...
  • jsoncpp headers

    2020-12-25 17:27:47
    <div><p>Missing jsoncpp headers to the thrird_party's include directory. Without them examples not compiling. Those headers from older times. Not newest and latest.</p><p>该提问来源于开源项目ÿ...
  • Jsoncpp string

    2021-01-12 14:53:48
    <div><p>After <code>std::string</code> -> <code>JSON_CPP, these are the actual changes. For discussion with of ETFlab.</p><p>该提问来源于开源项目:open-source-parsers/jsoncpp</p></div>
  • Jsoncpp的简单使用

    2018-03-07 10:48:55
    jsoncpp
  • jsoncpp类库包

    2020-10-24 19:32:02
    含有源码,编译之后可以直接调用,已经配置好的win32情况下的jsoncpp,在工程里可以直接调用!!
  • jsoncpp.rar

    2020-06-23 13:48:34
    我下载好了C++的第三方库jsoncpp方便用于各种json的操作等等,希望能帮到大家哈哈哈

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,412
精华内容 1,364
关键字:

jsoncpp