`
lqhider
  • 浏览: 9791 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

解析Json——操纵JsonObject

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



一、创建JsonObject实例

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

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

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

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

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

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

    HashMap<Object, Object> map = new HashMap<Object, Object>(); 
    map.put("nameA", "valueA");  
    map.put("nameB", "valueB");  
    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构成的集合。
分享到:
评论

相关推荐

    C#像java一样优雅的解析JSON数据

    C#的一个解析JSON的工具类,像java一样优雅的解析JSON数据,包含有JSONObject和JSONArray对象。 JSONObject json = new JSONObject(); json.Put("sex", "男"); json.Put("age", 123); json.Put("name", "张三"); ...

    org.json.JSONObject引用依赖包

    在Java开发中,`org.json.JSONObject` 是一个广泛使用的库,它允许开发者处理JSON对象,进行JSON数据的创建、解析和操作。这个库是`org.json`包的一部分,由Morten Kjetland开发并维护,它提供了一个简单且直观的...

    org.json.JSONObject 包下载

    `org.json.JSONObject`是Java编程语言中用于处理JSON(JavaScript Object Notation)数据的一个轻量级库。这个库由Mozilla Public License提供,广泛应用于需要在Java应用中进行JSON解析、生成和操作的场景。JSON是...

    用于java对象与json对象间的相互转换(net.sf.json.JSONObject)

    这段代码会将`jsonString`解析成一个`JSONObject`,你可以通过字段名访问其中的数据,如`jsonObject.getString("name")`来获取`name`的值。 ### 2. 将JSON字符串转换为Java对象 `JSONObject`提供了一种将JSON数据...

    net.sf.json.JSONObject依赖jar

    在实际开发中,除了`fromObject()`,net.sf.json.JSONObject还提供了许多其他方法,如`get()`, `put()`, `toString()`, `toJSONArray()`等,帮助开发者进行JSON数据的操作和解析。这些功能使得...

    Json解析库JsonObject

    方便好用的json解析库,每个json元素都是一个JsonElement对象,通过这个对象,你可以很方便的从Json子类对象中得到你想要的值,不需要你进一步转换,用法如: JsonObject jsonObject = new JsonObject (...); 在...

    net.sf.json.JsonObject需要的jar包

    `net.sf.json.JSONObject` 是json-lib中的核心类,它允许你将Java对象转换为JSON表示,并反之将JSON字符串解析为Java对象。这极大地简化了数据的序列化和反序列化过程。例如,你可以将一个HashMap转换为JSON对象,...

    net.sf.json.JSONObject相关jar包.zip

    2. **解析JSON字符串**:`JSONObject jsonObject = JSONObject.fromObject(jsonString);` 这将把JSON字符串转换为JSONObject对象。 3. **获取值**:使用get()方法可以获取存储的值,如 `String value = jsonObject....

    使用JSONObject解析json数据

    总的来说,`JSONObject`是Java中处理JSON数据的重要工具,无论是解析从服务器接收的数据还是构建要发送到服务器的数据,都离不开它的支持。了解并熟练掌握`JSONObject`的使用,对于进行Web开发或API接口设计至关重要...

    org.json.JSONObject jar包

    org.json.JSONObject的6个jar包 commons-beanutils;commons-collections;commons-lang;commons-logging;ezmorph;json-lib

    net.sf.json.JSONObject Jar包下载

    无论你需要解析接收到的JSON字符串,还是需要将Java对象转化为JSON格式发送出去,"net.sf.json.JSONObject"都提供了强大的工具。 为了使用这个Jar包,你需要将其添加到项目的类路径中。如果你使用的是Maven,可以在...

    解决net.sf.json.JSONObject

    `JSONObject`提供了`fromObject()`方法解析JSON字符串: ```java String jsonString = "{\"name\":\"John\", \"age\":30}"; JSONObject jsonObject = JSONObject.fromObject(jsonString); ``` 4. **获取键值**...

    net.sf.json.JSONObject 依赖的包

    在使用`net.sf.json.JSONObject`时,需要注意的是,这个库可能不支持最新的JSON语法特性,例如JSON数组的空元素解析,以及某些复杂的嵌套结构处理。另外,由于这个库相对较老,对于性能和内存效率可能不如现代的JSON...

    net.sf.json.JSONObject实现Object对象与Json字符串的互转

    `JSONObject`可以从一个Java对象创建,也可以解析为一个JSON字符串。例如,我们有一个简单的Java对象: ```java public class User { private String name; private int age; // getters and setters } ``` 要...

    net.sf.json.JSONObject需要的jar包

    net.sf.json.JSONObject所需要的jar包 commons-beanutils-1.9.3.jar commons-collections-3.2.2 commons-lang-2.6 commons-logging-1.2 ezmorph-1.0.6 json-lib-2.4-jdk15

    json.jar(JSONObject)

    4. 从JSON字符串解析:使用`JSONObject(String)`构造函数或`JSONObject.parseObject(String)`静态方法将JSON字符串转换为`JSONObject`。例如: ```java String jsonString = "{\"name\":\"John\",\"age\":30}"; ...

    java 解析 json文件 java 解析 json文件

    Java解析JSON文件是Java开发中常见的一项任务,特别是在与Web服务交互或处理API响应时。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,因其简洁和易于阅读及编写的特点,被广泛应用于网络数据传输...

    net.sf.json.JSONObject依赖库.zip

    JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。 `net.sf.json.JSONObject`是该库中的核心类,它代表了一个JSON对象。这个类提供了一系列的方法来创建、修改和操作JSON对象。例如,...

Global site tag (gtag.js) - Google Analytics