加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

JsonCpp解析简单Json对象

发布时间:2020-12-16 18:51:29 所属栏目:百科 来源:网络整理
导读:JsonCpp解析简单Json对象 概述 ? Json格式文本目前主要用于数据交换,相较于xml,Json具有更好地可读性,也更易于编写。同样的表达内容,Json即是全放在同一行也能够清楚地阅读,xml就比较困难了。最近也是在项目中用到了Json作为数据交换的格式,也学习使用

JsonCpp解析简单Json对象

概述

? Json格式文本目前主要用于数据交换,相较于xml,Json具有更好地可读性,也更易于编写。同样的表达内容,Json即是全放在同一行也能够清楚地阅读,xml就比较困难了。最近也是在项目中用到了Json作为数据交换的格式,也学习使用了一个Json解析处理的C++库,用起来比较优雅,风格也很符合STL风格,特地记录一下,以后方便查找。

简单的Json格式

? 简单的Json格式结构如std::map一般,是一种Key-Value的映射关系,即一个Json对象中含有零个或多个的二元组,一个简单的例子如下:

{
  "name": "Morris","age": 22 }

? 对于Json,JavaScript对Json格式原生支持很好,可以和访问基本数据类型一样简单使用。在C++中就比较麻烦了,标准库中并未对Json提供支持,在C++项目中如果使用到Json,找不到合适的第三方库,自己写就很麻烦了。幸好,确实有第三方库实现了很好的支持Json的方式,下面就来说说这个第三方开源库——JsonCpp。

Json::Value

? Json中,最重要的概念就是对象,上面的例子中,整体就是一个Json对象,其中的name、age字段则可视为其属性。JsonCpp中,通过特定的方法,可以将文件流或者字符串形式的Json文本构造成Json::Value类型的对象。构造Json::Value对象是为了更方便的操作Json数据,如上面所说,简单的Json格式结构如std::map一般,JsonCpp的实现也让Json::Value具有了和std::map差不多形式的操作方式,如可以通过Key值索引,取得对应的Value,在Json::Value中则是通过字段名,取得对应的值。对于添加Key-Value或字段,两者操作方式同样类似。

Json::Reader

? 为了构造更方便使用的Json::Value对象,一般使用Json::Reader来构造。Json::Reader可以接收多种格式的数据,并将它们构造成合适的Json::Value对象,比较常见的格式是文件流和字符串。这里可以先给个简单的例子:

std::ifstream ifs;
    ifs.open("/Users/Morris/Code/cpp/test/test.json");
    Json::Value val;
    Json::Reader reader;

    if (!reader.parse(ifs,val)) {
        return -1;
    }

? 使用例子中的代码,即可将test.json文件中的json文本构造成为Json::Value对象。

Json::Value取值

? 有了上面简单的了解,这里就可以编写JsonCpp操作Json数据的简单代码了。具体代码如下:

//
// main.cpp
// TestJson
//
// Created by Morris on 2016/11/21.
// Copyright ? 2016年 Morris. All rights reserved.
//

#include <iostream> 
#include <fstream>
#include <string>
#include <json/json.h>

int main(int argc,const char * argv[])
{
    std::ifstream ifs;
    ifs.open("/Users/Morris/Code/cpp/test/test.json");
    Json::Value val;
    Json::Reader reader;

    if (!reader.parse(ifs,val)) {
        return -1;
    }

    std::string name = val["name"].asString();
    int age = val["age"].asInt();
    std::cout << "Name: " << name << std::endl;
    std::cout << "Age: " << age << std::endl; 

    return 0;
}

? 在使用JsonCpp操作Json数据的过程还有一些需要注意的点,这里就不赘述了,先学会简单的使用方式,后续的使用过程中,会一一提到。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读