jsoncpp学习笔记

原创 2018年04月15日 23:47:04

jsoncpp


一. json基础

类型:
1. Json::Value为主要数据类型;
2. Json::Reader将文件流或字符串创解析到Json::Value中,主要使用parse函数;3. Json::Writer:与JsonReader相反,将Json::Value转换成字符串流等,Writer类是一个纯虚类,并不能直接使用。在此我们使用 Json::Writer 的子类:son::FastWriter(将数据写入一行,没有格式),Json::StyledWriter(按json格式化输出,易于阅读)


二. 解析json

1. 从内存解析json

void f() {
    Json::Value root;
    Json::Reader reader;

    char str[] = "{\"name\" : \"liushall\", \"age\" : 20, \
        \"files\" : [\"1.json\", \"2.json\"]}";
    if ( !reader.parse( str, root ) ) {
        cout << "parse error.\n";
        return -1;
    }

    cout << "name : " << root["name"].asString() << endl;
    cout << "age : " << root["age"].asInt() << endl;

    Json::Value files = root["files"];
    cout << "files : ";
    for( int i = 0; i < files.size(); i++ ) {
        cout << files[i].asString() << ' ';
    }
}

2. 从文件中解析json

提供的json文件:

{
    "name" : "liushall",
    "age" : 10;
}

代码:

void f() {
    Json::Reader reader;
    Json::Value root;

    ifstream ifs("test.json");

    if ( !reader.parse( ifs, root ) ) {
        cout << "parse error.\n";
        return -1;
    }

    cout << root["name"].asString() << endl;
    cout << root["age"].asInt() << endl;
}

三. 封装json

1. 简单json数据封装

void f() {
    Json::Value root;
    Json::StyledWriter writer;

    root["name"] = "liushall";
    root["age"] = 20;

    string str = writer.write( root );
    cout << str << endl;
}

2. 封装json数据——内嵌array的object

int main() {
    Json::Value root;
    Json::StyledWriter writer;

    root["name"] = "liushall";
    root["age"] = 20;
    root["msg"] = "linux";

    Json::Value files;
    files["haha"] = "1.cpp";
    files["ha"] = "2.cpp";

    root["files"] = files;
    string str = writer.write( root );
    cout << str << endl;
}

3. 封装json数据——内嵌object的array

void f() {
    Json::Value root;
    Json::StyledWriter writer;

    {
        Json::Value person; 
        person["name"] = "liushall";
        person["age"] = 100;
        root.append( person );
    }

    {
        Json::Value person; 
        person["name"] = "Kit";
        person["age"] = 89;
        root.append( person );
    }

    root.append( "a json note" );   

    string json_file = writer.write(root);
    cout << json_file << endl;
}

注意,不能直接用root[0] = person;,需要声明[]内数字的类型,即root[1U] = person,声明为unsigned类型。

参考:
https://www.cnblogs.com/tocy/p/json-intro_jsoncpp-lib.html
https://www.cnblogs.com/DswCnblog/p/6678708.html

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liushall/article/details/79955234

JsonCpp使用细谈(Windows平台)

JSON:(JavaScript Object Notation)是基于Javascript的一种轻量级的数据交换格式,易于读写同时也易于机器解析和生成。具体详细有关Json的信息可参考JSON官网:...
  • hailong0715
  • hailong0715
  • 2016年07月18日 16:37
  • 2389

Jsoncpp 学习笔记

相关信息 源码网址 github : https://github.com/open-source-parsers/jsoncpp Git remote https://...
  • cchd0001
  • cchd0001
  • 2015年04月30日 15:10
  • 572

关于jsoncpp内部排序的问题

使用jsoncpp创建文件的时候,跟添加的顺序不相同,它是按照字母表给排序过的。 虽然问题没有解决,但是找到一篇很好的文章http://wff8785.blog.163.com/blog/stati...
  • sdcxyz
  • sdcxyz
  • 2013年09月22日 18:41
  • 5216

jsoncpp使用方法

使用 C++ 处理 JSON 数据交换格式   一、摘要     JSON 的全称为:JavaScript Object Notation,顾名思义,JSON 是用于标记 Javascript 对象的...
  • wangchangshuai0010
  • wangchangshuai0010
  • 2014年01月12日 11:10
  • 18973

Jsoncpp 中文汉字unicode乱码解决及标点问题解决

由于项目中用到了JSON数据结构,客户端采用VC编写,服务端数据接口采用PHP编写,遇到了JSON中文Unicode编码后,客户端出现了乱码的情形。 网上有一个方法比较好用,就是修改json_rea...
  • paopaoqqcbg
  • paopaoqqcbg
  • 2017年05月24日 10:30
  • 2152

jsoncpp解决中文乱码

在mfc程序使用jsoncpp,用来解析服务端传递来的json数据,本例将完成一个操作实例: 1.新建一个用来测试的服务端接口(本例php): ...
  • xwlyun
  • xwlyun
  • 2014年03月17日 11:26
  • 5576

jsoncpp解析拼装数组

Cocos2d-x添加jsoncpp应该资料都有了,今天来讲讲数组的解析和拼装~ [cpp] view plain copy int main()   {   数组创建与分析:...
  • abcd1f2
  • abcd1f2
  • 2016年05月17日 19:45
  • 2348

JSONCPP的使用笔记

由于之前没有查看JSONCPP的相关文档,直接使用了,在JSON没匹配时,老是导致程序崩溃,后来懒得查相关说明,直接写了几个简单例子验证一下,结果如下: 数组不能使用isString()等函数判...
  • VictaminC
  • VictaminC
  • 2016年12月19日 12:08
  • 618

JSONCPP的简单使用

JSONCPP下载地址:http://sourceforge.net/projects/jsoncpp。 1、从字符串中解析JSON //从字符串中解析json void parse_json_fro...
  • hellokandy
  • hellokandy
  • 2016年06月14日 16:20
  • 2030

JSONCPP库移植

Linux平台编译 解压后运行如下命令: # 先安装 scons $ sudo apt-get install scons $ scons platform=linux-gcc ...
  • zx7415963
  • zx7415963
  • 2016年07月18日 17:23
  • 482
收藏助手
不良信息举报
您举报文章:jsoncpp学习笔记
举报原因:
原因补充:

(最多只允许输入30个字)