JsonCpp操作数组对象

JsonCpp操作数组对象

概述

​ Json格式数据中,除了简单的String类型和一些非String类型,也有像各种高级语言中的数组类型一般的数组对象,且Json数组在实际开发中使用频率也比较高,这里就记录一些对于Json数组的常规操作。

JsonCpp操作简单数组对象

​ Json数组对象以”[]”进行包裹,方括号内的元素即是数组的元素。数组的元素可以是一些基本的Json类型,也可以是一些复杂的Json对象,刚开始就说一下对于元素为基本Json类型的数组如何操作,这里先给出一个简单的Json数组例子:

[ 1, 2, 3, 4 ]
  • 1

​ 上述例子则表示了一个结构简单的Json数组,取其中元素的操作如各高级语言一般,可以使用”[]” + Index的方式,回顾上一篇JsonCpp的介绍,要取出Json数据中的某个元素的值,则应该将代表该数据的对象先获取得到,使用”[]” + Index即是获取了代表该数据的对象,之后再根据Json数据中的数据类型去执行Json::Value的成员方法asType(Type指代某种Json类型)。下面给出操作上述例子的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;
    }

    int sz = val.size();
    for (int i = 0; i < sz; ++i) {
        std::cout << "Element " << i + 1 << ": ";
        std::cout << val[i].asInt();
        std::cout << std::endl;
    }

    return 0;
}

JsonCpp操作复杂Json数组

​ 对于Json数组,还有另外的一些复杂的情况,如Json数组是某一Json对象的一部分,或者Json数组中元素是复杂的Json对象。这两种情况在Json的实际运用中出现的次数还比较频繁,先说第一种,Json数组是某一Json对象的一部分,先给出一个具体的例子:

{
    "Name": "Morris", 
    "Skills": [ "Basketball", "Sing", "Play Games", "Program" ] 
}
  • 1
  • 2
  • 3
  • 4

​ 名为Skills的Json数组为Json对象的一个属性,获取Skills中具体数据的方法,则是先获取该Json数组对象,如获取Json对象的属性一般使用key值即可从Json对象中获取到相应的属性,之后再使用上面提到的Json数组操作方式即可进行对于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;
    }

    int sz = val["Skills"].size();
    for (int i = 0; i < sz; ++i) {
        std::cout << "Element " << i + 1 << ": ";
        std::cout << val["Skills"][i].asString();
        std::cout << std::endl;
    }

    return 0;
}

​ 对于Json数组的另一种比较复杂的情况,Json数组元素是对象,看过上面的叙述,应该也比较容易想到操作方式了。即先获取Json数组对象,之后再以Index方式获取到数组中单个元素,再对单个元素以操作Json对象的方式操作即可。具体代码不贴出来了,可以自己试着编写一下。

原文地址:https://www.cnblogs.com/whwywzhj/p/8558773.html