递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 6838|回复: 2
打印 上一主题 下一主题

[安卓] 【图文】JSON数组类-教你如何正确解析和合成JSON数组类

[复制链接]

443

主题

1万

帖子

3万

积分

超级版主

Rank: 8Rank: 8

积分
39321
跳转到指定楼层
楼主
发表于 2020-8-26 11:23:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
来源:http://doc.voldp.com
照顾某些人懒得翻图文教程,所以特意单独发出来。


JSON数组类操作实例讲解
作者:创世魂

● 帮助说明

本类位于“JSON数据访问支持”模块中。
● 本类说明

JSON数组类和“JSON对象类”类似,只是具体的表现形式不同,具体如下:
1、以精易网页助手2.66版本为准。
      图左:为JSON数组类文本代码。
      图右:为解析到树形框后显示效果,更加方便理解JSON数组格式。
2、JSON数组类标准格式为以“[”开始,最终以“]”结尾。
      JSON数组类没有键名键值概念,只有成员。
    成员内容可以使用“文本”“整数”“小数”“长整数”“逻辑”(true为真、false为假)
     以及“对象成员”(可使用json对象类或json数组类当成员)。
     每个成员之间必须用英文的逗号隔开,并且最后一个成员不需要逗号。
3、利用精易网页助手解析到树型框后(图右),凡是以“组”文字开始的代表为“JSON数组类”

● 创建自文本数据
● 成员数(读)
“创建自文本数据”帮助页:
本方法只有一个参数,提供正确的JSON数组文本即可创建当前对象。
创建失败返回空对象。

“成员数(读)”帮助页:
通过本属性可取出JSON数组类中的成员数量。

准备如下JSON文本:
[1,"文本"]

代码编写如下图:
1、将准备的JSON文本放入到常量值中。
2、调用“创建自文本数据()”方法,并赋值给定义的“JSON数组类”变量。
3、调用“成员数”读属性,将结果显示在编辑框中。

运行效果如下图:
最后可看到成员数等于2.

● 创建自数组
帮助页如下图:
通过本方法可将“文本数组”“整数数组”这样的基本数据类型数组转换成JSON数组类。

准备如下数组文本:
{"成员1","成员2"}

代码编写如下图:
1、将准备的数组文本放入常量值中。
2、调用本方法创建JSON数组类,转换成文本显示在编辑框中。

运行效果如下图:
最终可看到文本形式的JSON数组类被显示出来。

● 创建自解析对象
帮助页如下图:
通过“JSON解析类”创建当前数组对象,失败返回空对象。

准备如下JSON文本:
[1,"文本"]

代码编写如下图:
1、定义文本常量,初始值导入json数据。
2、通过“JSON解析类.创建自文本()”方法创建解析类对象。
3、调用“创建自解析对象()”方法,创建数组对象后,将JSON数组类转换成文本显示出来。

运行效果如下图:

● 创建自集合
帮助页如下图:
本方法,可通过一个基础类存在集合模板类的对象,来创建JSON数组类。

文本哈希集类帮助页:
通过cha询帮助页,得知当前类的基础类存在“集合模板类”所以可以用来创建json数组类。

代码编写如下图:
1、定义“文本哈希集类”变量,并添加两个成员。
2、调用“创建自集合()”方法创建后,并将结果显示在编辑框中。

运行效果如下图:
最终被添加的两个成员显示在了JSON数组类中。

● 到JSON对象
帮助页如下图:
本方法可通过提供的“键名数组”“键值数组”进行合并处理转换成JSON对象类。

准备如下JSON文本:
["键名1","键名2"]
["键值1","键值2"]

代码编写如下图:
1、将准备的键名json和键值json分别放入常量值中。
2、利用“创建自文本数据()”方法分别创建“键值JSON数组类”“键名JSON数组类”
3、最后利用当前方法合并成json对象类。

运行效果如下图:
最终可看到准备的两个JSON数组类,被合并成了一个JSON对象类数据。

● 到可读文本
帮助页如下图:
本方法和“到文本()”的作用一致,不同之处是本方法可进行文本缩进。
注意:转换失败将返回空对象。

准备如下JSON文本:
[1,"文本"]

代码编写如下图:
创建json数组类后可以直接调用本方法转换成可读文本数据。

运行效果如下图:

● 加入
帮助页如下图:
本方法的作用,是将JSON数组类中的每个成员用指定分隔符连接起来,返回连接后的文本。

准备如下JSON文本:
[1,"文本"]

代码编写如下图:
创建JSON数组类后调用“加入()”方法,利用减号连接成员。

运行效果如下图:
组中可看到每个成员用减号连接,并且如果是文本成员会保留引号。

● 取小数值 ● 取整数值 ● 取文本值 ● 取逻辑值 ● 取长整数值 ● 取对象值 ● 取数组值
以上几个方法用于取出不同数据类型的成员。
用法一致,此处演示“取文本值()”方法

“取文本值”帮助页:
顾名思义,本方法可取出JSON数组类指定成员索引的文本数据。

准备如下JSON文本:
[1,"文本"]

代码编写如下图:
1、将准备的json文本放入常量中。
2、创建JSON数组类后继续调用“取文本值()”方法,取出索引0的数据。

运行效果如下图:

● 取值
帮助页如下图:
本方法用于取出数组中成员的对象类值。
主要作用可用来判断,指定索引的成员是什么类型,从而决定如何进行下一步操作。

准备如下JSON文本:
[ 1, 1.1, true, "文本", { "内嵌": "json对象" }, [1, "内嵌json数组"] ]

代码编写如下图:
1、通过常量值创建JSON数组类对象。
2、利用“循环”JSON数组每一个成员。
3、取出的对象类成员,可通过“属于”关键词判断是否为指定类型。

运行效果如下图:

● 是否为空数据
帮助页如下图:
本方法用于判断成员是否为空数据,也就是成员是否为NULL。

准备如下JSON文本:
[ 1, null]

代码编写如下图:
创建JSON数组类后,判断索引1的成员是否为空。

运行效果如下图:

● 移除指定对象
帮助页如下图:
本方法类似于“取值()”,不同之处是本方法会将原对象内的指定成员索引的值删除。

准备如下JSON文本:
[ 1, 1.1, true, "文本", { "内嵌": "json对象" }, [1, "内嵌json数组"] ]

代码编写如下图:
1、通过JSON数据创建JSON数组类对象。
2、移除索引4,返回索引4的成员数据。
3、输出原对象剩余成员数据。

运行效果如下图:
最终可看到,输出的原成员数据内,缺少了JSON对象类数据。
证明该数据已经被移除。

● 置入整数值 ● 置入小数值 ● 置入文本值 ● 置入逻辑值 ● 置入长整数值
以上几个方法用法一致,不同之处为数据类型不同。
下面举例置入文本值方法。

帮助页如下图:
调用本方法可置入文本数据到JSON数组类中。
失败返回空对象,如果数组中已经存在成员,则新置入的数据将加入到最后面。

代码编写如下图:
1、定义“JSON数组类”变量,调用当前方法置入三个成员。
2、将结果显示在编辑框中。

运行效果如下图:
三个成员被输出,证明置入成员成功。

● 置入对象值
帮助页如下图:
通过本方法可置入任意类型的数据到JSON数组类中。

代码编写如下图:
调用本方法分别置入文本,整数和JSON对象类数据。

运行效果如下图:
所有置入的数据将显示在JSON数组类中。

● 置入对象值到指定位置
● 置入整数值到指定位置
● 置入文本值到指定位置
● 置入逻辑值到指定位置
● 置入长整数到指定位置
以上几个方法的作用,可用于替换指定索引的成员数据。
下面看代码演示“置入文本值到指定位置”

准备如下JSON文本:
[1,"文本"]

代码编写如下图:
1、利用常量值创建JSON数组类对象。
2、调用“置入文本值到指定位置()”方法,替换索引0的成员。
3、输出结果到编辑框中。

运行效果如下图:
原成员“1”被替换成“替换成员”


● 生成一段被嵌套的JSON数据

代码编写如下图:
1、定义两个类型为“JSON对象类”的变量,分别为“一级JSON”“二级JSON”
注:“一级JSON”即最外层的JSON对象,“二级JSON”为嵌套的JSON对象。
2、给“二级JSON”置入文本值,随后将当前对象保存到“一级JSON”中。
3、创建类型为“JSON数组类”“二级JSON数组”变量,并置入三个文本值。
4、将“二级JSON数组”置入“一级JSON”对象中。
5、最后将“一级JSON”转换成可读文本。

运行效果如下图:




安卓无障碍实战课:点击查看
交流群:641526939
回复

使用道具 举报

12

主题

50

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
沙发
发表于 2021-3-23 00:19:38 | 只看该作者
PC的有的命令没有
回复

使用道具 举报

1

主题

11

帖子

29

积分

新手上路

Rank: 1

积分
29
板凳
发表于 昨天 19:59 | 只看该作者
请教依稀,YYJSON 怎么取一个json下面二级像的数组个数,,跟e不一样
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2024-9-22 10:42 , Processed in 0.094979 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表