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对象的方式操作即可。具体代码不贴出来了,可以自己试着编写一下。
JsonCpp操作数组对象的更多相关文章
- JS 操作数组对象
我们在操作数组时,加入数组中是以对象的形式存在,例如: 那么我们会涉及到去重复,去掉为0的数组中的对象,js代码如下: function getItemList(gid, totalMoney, ad ...
- 让操作javascript对象数组像.net lamda表达式一样
让操作javascript对象数组像.net lamda表达式一样 随着web应用程序的富客户端化.ajax的广泛使用及复杂的前端业务逻辑.对js对象数组.json数组的各种操作越来越多.越来越复杂. ...
- Numpy数组对象的操作-索引机制、切片和迭代方法
前几篇博文我写了数组创建和数据运算,现在我们就来看一下数组对象的操作方法.使用索引和切片的方法选择元素,还有如何数组的迭代方法. 一.索引机制 1.一维数组 In [1]: a = np.arange ...
- C#对Mongodb数组对象操作
Mongo对数据的存储非常随意,需要修改对象中的数组对象时,就会变得比较复杂. 类中的类对象可以直接通过“.”例如:Department.User.name 类中的对象User是数组时可以用Depar ...
- js对数组对象的操作以及方法的使用
js对数组对象的操作以及方法的使用 如何声明创建一个数组对象: var arr = new Array(); 或者 var arr = []; 如何移除所有数组中数据? arrayJson.dataL ...
- ArrayList的操作和对象数组
ArrayList是List接口的一个实现类,它是程序中最常见的一种集合. ArrayList内部的数据存储结构时候数组形式,在增加或删除指定位置的元素时,会创建新的数组,效率比较低,因此不适合做大量 ...
- 在Javascript中数组对象(json)里元素相同的操作
1.数组对象元素相同,分组显示 let arry = [ { expensedate: '2018/09/29', amount: 1, type: '交通费' }, { expensedate: ...
- 了解JavaScript 数组对象及其方法
数组在我目前学习过的编程语言中都可以见到, 形形色色的方法也数不胜数, 不过功能都一样, 最多也就是方法名稍稍有所不同, 老外也没个准啊, 如果英语比较好的同学对于学习方法(method)来说是很快的 ...
- 简述JavaScript对象、数组对象与类数组对象
问题引出 在上图给出的文档中,用JavaScript获取那个a标签,要用什么办法呢?相信第一反应一定是使用document.getElementsByTagName('a')[0]来获取.同样的,在使 ...
随机推荐
- Struts2和SpringMVC的action是单例还是原型的?
struts2的acion单独使用的时候应是多例的,也就是原型(prototype). 因为它是基于类开发的,它的三种获取页面传参的方式都是通过成员变量的方式来接受的. 如果用struts2框架基于方 ...
- UML-5-进化式需求
1.需求管理定义 瀑布式式中,研发之前,完全定义和固化需求. 但,需求是不断变化的,你之前可能会有45%的需求,不会被使用到,经常使用到的只占20%左右. 因此,如何寻找这20%的需求,是重点.其方法 ...
- Image和Base64相互转换
1.图片转换为Base64 /// <summary> /// 图片转换为base64 /// </summary> /// <param name="imag ...
- 搭建github静态博客
github设置 建立新的repository,命名为OwnerName.github.io,例如gotochenglong.github.io git管理 设置ssh密匙 使用命令ssh-keyge ...
- Net操作Excel,不依赖服务器端环境配置(终极方法NPOI)转。
这是起因,为什么会需要用到这个,主要是分析了一下为什么从oledb那个方式换成这个方式.文章见链接 http://www.cnblogs.com/Jerseyblog/p/6410703.html 前 ...
- ORACLE迁移GP实践
最近在做oracle到greenplum的迁移实践,步骤如下: 1. 使用ora2pg实现Oracle的数据结构迁移到GP的实现过程 2. Oracle的数据迁移到GP的实现过程 1. ora2p ...
- Python爬虫抓取某音乐网站MP3(下载歌曲、存入Sqlite)
最近右胳膊受伤,打了石膏在家休息.为了实现之前的想法,就用左手打字.写代码,查资料完成了这个资源小爬虫.网页爬虫, 最主要的是协议分析(必须要弄清楚自己的目的),另外就是要考虑对爬取的数据归类,存储. ...
- Robot Framework(AutoItLibrary库关键字介绍)
AutoItLibrary库关键字 AutoItLibrary 的对象操作大体上有几大主要部分,Window 操作.Control 操作.Mouse 操作.Process操作.Run 操作.Reg 操 ...
- STM32F407 使用HAL库延时微妙实现方法(附CubeMX配置过程)
STM32F407 使用HAL库延时微妙实现方法(STM32CubeMX配置) 作者 : 李剀出处 : https://www.cnblogs.com/kevin-nancy/p/10696681.h ...
- [springBoot系列]--spring-boot-devtools在Idea中热部署方法
1 pom.xml文件 注:热部署功能spring-boot-1.3开始有的 <!--添加依赖--> <dependency> <groupId>org.sprin ...