操纵JsonObject的方法

开发 后端
Json对象是Name Value对(即子元素)的无序集合,相当于一个Map对象。JsonObject类是bantouyan-json库对Json对象的抽象,提供操纵Json对象的各种方法。本文就介绍如何操纵JsonObject类。

Json对象是Name Value对(即子元素)的无序集合,相当于一个Map对象。JsonObject类是bantouyan-json库对Json对象的抽象,提供操纵Json对象的各种方法。本文就介绍如何操纵JsonObject类。

一、创建JsonObject实例

创建JsonObject实例有两类方法,一是利用超类Json的静态方法parseJsonText、parseJsonReader与parseJavaMap获取JsonObject实例,二是直接利用JsonObject类的构造方法创建JsonObject实例。

根据传入的参数不同,parseJsonText返回一个JsonObject实例或JsonArray实例,利用parseJsonText方法的示例代码如下:

Java代码

 

 

  1. String jsonText = "{'name1': 'value1', 'name2': 'value2'}";     
  2. JsonObject jobj = (JsonObject)Json.parseJsonText(jsonText);    

 

parseJsonText返回的是一个Json类变量,所以要使用强制类型转换。

parseJsonReader负责从Reader类型参数内读取Json文本流,然后转换为Json实例,与parseJsonText一样,返回值需要强制类型转换。

方法parseJavaMap直接返回JsonObject变量,不用类型转换,示例代码如下:

Java代码

 

 

  1. HashMap map = new HashMap();     
  2. map.put("nameA""valueA");      
  3. map.put("nameB""valueB");      
  4. JsonObject jobj = Json.parseJavaMap(map);   

 

如果Map内有复杂的对象需要解析,可以用parseJavaMap的重载版本parseJavaMap(Map, JsonParser)来处理(JsonParser的使用参考解析Json——Json类的静态方法的第五部分)。

JsonObject类的构造函数有四个重载版本:JsonObject()、JsonObject(int)、JsonObject(Map)与JsonObject(Map, JsonParser)。不带参数与带整型参数的重载版本都构造一个空的JsonObject实例,所不同的是带整型参数的重载版本能够指定JsonObject初始容量的大小,以避免不必要的重新分配内存。重载版本JsonObject(Map)与JsonObject(Map, JsonParser)的使用类似于Json类的静态方法parseJavaMap。

二、给JsonObject添加子元素

给JsonObject实例添加子元素调用方法add或addAll。bantouyan-json库规定,方法add与addAll都不能添加Name为null的子元素,也不能添加与已有子元素Name相同的子元素,否则会抛出异常。

方法add有七种重载版本,方法addAll有三种重载版本,分别使用于不同的情况。

三、变更JsonObject子元素的Value

要改变JsonObject子元素的Value可以调用方法set与setAll。这两个方法都忽略Name为null的子元素,如果存在Name相同的子元素,则更改这个子元素的Value,否则添加一个新的子元素。

方法set也有七种重载版本,addAll有三种重载版本,分别适用于不同的情况。

四、获取与检测JsonObject子元素

JsonObject的每个子元素的Value都是一个Json实例,可以用方法get(String)获取这个实例。至于这个实例的类型,除可以调用方法getType()获得外,还可以通过JsonObject对方法getType的重载版本getType(String)获取(String为子元素的Name)。

利用方法getString(String)可以获取指定Name的子元素Value的字符串值,如果子元素的Value是JsonPrimitive实例,则返回这个实例值对应的字符串(不带引号与转义符),否则返回对应的标准Json文本。

如果想获取子元素的Value所对应的boolean、double、long、JsonArray与JsonObject类型的值,则可以分别调用方法getBoolean(String)、getDouble(String)、getLong(String)、getJsonArray(String)与getJsonObject(String)。与getString方法不一样的是当子元素的Value无法转换为相应的类型时会抛出异常。方法canToBoolean(String)、canToDouble(String)、canToLong(String)、canToJsonArray(String)与canToJsonObject(String)可以检测是否可以转换为对应的类型。

以特定的类型获取子元素的Value时,方法canToXXX返回true并不表明子元素的Value就是所测试的类型。根据bantouyan-json库设计,如果子元素的Value的类型是INTEGER,则可以得到对应的double类型的值,如果类型时String,对于部分Value,可以得到对应的boolean、long、double类型的值。

五、确定JsonObject子元素是否存在

在获取子元素前可能无法确定JsonObject是否包含指定Name的子元素,要确定子元素存在,请调用方法containsName(String)。

六、删除JsonObject子元素

删除JsonObject的子元素调用方法remove(String),参数为要删除的子元素的Name。

七、获取JsonObject子元素相关的集合

与Map一样,JsonObject也是由无序的Name Value对构成,为此,JsonObject实现了三个方法用于获取子元素相关的集合。

entrySet(),返回由子元素的Name Value对构成的集合。

nameSet(),返回由子元素的Name构成的集合。

values(),返回由子元素的Value构成的集合。

【编辑推荐】

  1. JSON数据在J2ME下的构造和解析
  2. 深入了解J2ME Polish+Eclipse配置过程
  3. 探究J2ME中cookie库的管理
  4. 术语汇编 J2ME 3D技术简介
  5. 解析Linux下如何用eclipse搭建J2ME开发环境
责任编辑:金贺 来源: JavaEye博客
相关推荐

2010-12-22 11:19:09

Java字节代码

2020-05-14 09:42:15

数据操纵网络阻击数据泄露

2022-06-06 14:56:03

机器人算法模型

2012-02-08 14:24:35

HibernateJava

2014-10-09 09:34:38

ATM恶意软件Tyupkin

2020-10-31 21:47:06

Python数据结构开发

2009-08-06 18:10:06

C#数据库事务

2013-07-10 09:26:27

亚马逊Web服务云计算创新云计算市场情况

2009-09-03 16:17:12

C#操纵系统菜单

2021-07-08 15:48:51

僵尸网络IoTDDoS攻击

2011-03-04 11:08:46

ADO.NET数据库

2021-09-13 07:23:53

KafkaGo语言

2020-09-28 13:57:35

恶意软件黑客网络攻击

2021-06-15 09:10:41

漏洞网络安全程序员

2012-12-31 10:15:15

2018-10-09 10:35:00

2009-11-11 16:15:04

ADO.NET操纵数据

2024-11-01 14:56:09

2016-12-26 18:51:34

AndroidJavascriptJSONObject

2015-05-29 18:39:14

点赞
收藏

51CTO技术栈公众号