JsonCpp解析简单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数据的过程还有一些需要注意的点,这里就不赘述了,先学会简单的使用方式,后续的使用过程中,会一一提到。

相关文章

AJAX是一种基于JavaScript和XML的技术,能够使网页实现异步交...
在网页开发中,我们常常需要通过Ajax从后端获取数据并在页面...
在前端开发中,经常需要循环JSON对象数组进行数据操作。使用...
AJAX(Asynchronous JavaScript and XML)是一种用于创建 We...
AJAX技术被广泛应用于现代Web开发,它可以在无需重新加载页面...
Ajax是一种通过JavaScript和HTTP请求交互的技术,可以实现无...