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]来获取.同样的,在使 ...
随机推荐
- Vue项目中用的Jquery.js和easing.js做的抛物线
如果项目中还用到自有的$ <script> jQuery.noConflict();</script> //星星掉落movePathNew(args) { let self = ...
- [转] AKKA简介
[From] https://blog.csdn.net/linuxarmsummary/article/details/79399602 Akka in JAVA(一) AKKA简介 什么是AKKA ...
- supervisor使用小记
最近使用supervisor部署爬虫,百度了很多,磕磕绊绊自己也算是用起来了,以下是整理的使用情况. 第一步: 下载安装supervisor 使用的ubuntu16.04,直接 sudo apt-ge ...
- 解决js array的key不为数字时获取长度的问题
最近写js时碰到了当数组key不为数字时,获取数组的长度为0 的情况. 1.问题场景 var arr = new Array(); arr[‘s1‘] = 1001; console.log(arr. ...
- 用PL/sql连接oracle 弹窗出现 could not resolve the connect identifier specified 这个错误
1 错误如下图: 图1 2.可能原因: 配置oracle客户端中tnsnames.ora文件时,把数据库名弄错,如下图: 图2 箭头所指位置出错.箭头处应该为我们安装时的数据库名(通常是orcl).而 ...
- nginx, flask, wsgi
原来自己还没搞懂这些. 首先post一个观点: nginx应该是没解析任何东西,就判断是不是http请求,然后转发?或者判断是不是tcp请求,然后转发. 所以给了python后台就可以用wsgi解包. ...
- Ubuntu 16.04 compare 软件安装
1软件官网 http://www.scootersoftware.com/download.php?zz=kb_linux_install 2.打开上述网址可看到安装信息 终端安装方式: wget h ...
- JSONP原理及简单实现
在web2.0时代,熟练的使用ajax是每个前端攻城师必备的技能.然而由于受到浏览器的限制,ajax不允许跨域通信. JSONP就是就是目前主流的实现跨域通信的解决方案. 虽然在在jquery中,我们 ...
- sqlite3使用
sqlite3使用 sqlite可以在https://www.sqlite.org/网站上下载.支持Linux, MacOS, Windows等各种操作系统.下载后不需要安装,解压后就可以使用,追加路 ...
- 使用Chrome console提取页面数据
使用Chrome console提取页面数据 1.需求介绍 在做课题研究的过程中,遇到这样一个问题,有一个页面中包含很多IP地址,需要把这些IP地址提取出来保存到文件中.如下图所示: 一开始的做法是一 ...