(三)json-lib包的使用

        这篇笔记主要介绍json-lib包的创建和解析json数据的方式,主要是的JSONObject、JSONArray和Java对象:beans, maps, collections, java arrays等的转换。

1.简介

        json-lib包是一个构造和解析json的类库,提供将Java对象:beans, maps, collections, java arrays and XML等等转换成JSON数据,或者反向转换的功能。 json-lib包的下载地址:http://sourceforge.net/projects/json-lib/files/
        json-lib包的使用需要依赖下面的工具包:
这里打包了一份完整的工具包:

2.构造JSONObject和JSONArray

给出一个下面会用到的Student类:
 package jsonlib;
 public class Student {
     private String name;
     private String sex;
     private int age;
     public String getName() {
         return name;
     }
     public void setName(String name) {
         this.name = name;
     }
     public String getSex() {
         return sex;
     }
     public void setSex(String sex) {
         this.sex = sex;
     }
     public int getAge() {
         return age;
     }
     public void setAge(int age) {
         this.age = age;
     }
 }
2.1 fromObject(Object object)方法
        json-lib包中JSONObject和JSONArray类都有一个fromObject(Object object)的静态方法,即可以从参数object中构造json对象或数组。
        ①JSONObject.fromObject(Object object)中,参数可以是String、Map、beans等,不可以是collection、java arrays等
        ②JSONArray.fromObject(Object object)中,参数可以是String、Map、Colliection、collection、java arrays等
代码例子如下:
 package jsonlib;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import net.sf.json.*;
 public class JsonlibTest {
     public static void main(String[] args) {
         //String构造JSONObject
         String name = "{'name':'JTZen9'}";
         JSONObject jsonObject3 = JSONObject.fromObject(name);
         System.out.println(jsonObject3);

         //Java Array构造JSONArray
         String[] strings = {"1","2","3"};
         JSONArray jsonArray1 = JSONArray.fromObject(strings);
         System.out.println(jsonArray1);

         //Beans构造JSONObject
         Student student = new Student();
         student.setAge(21);
         student.setName("JTZen9");
         student.setSex("male");
         JSONObject jsonObject1 = JSONObject.fromObject(student);
         System.out.println(jsonObject1);

         //Map构造JSONObject
         Map<string object=""> map = new HashMap<string object="">();
         map.put("name", "JTZen9");
         map.put("num", strings);
         JSONObject jsonObject2 = JSONObject.fromObject(map);
         System.out.println(jsonObject2);

         //List构造JSONObject
         List<object> list = new ArrayList</object><object>();
         list.add("JTZen9");
         list.add(strings);
         list.add(map);
         list.add(student);
         JSONArray jsonArray2 = JSONArray.fromObject(list);
         System.out.println(jsonArray2);
     }
 }

输出的结果:

注意:
        ①当使用String转JSON时,如果是json对象,那么String必须是符合JSON对象的格式,同理,JSONArray也一样。
        ②如果传入fromObject(Object object)中的参数是其他类型,比如说int、double、boolean、或者不符合json格式的String,就会将生产空的JSONObject对象。详情可下载json-lib包查看fromObject方法的源代码。

2.2 其他方法

JSONObject类:

        put()方法和accumulate()方法,其实和org.json包的用法类似:
        ①put()方法,向json对象中加入字段和相应值,会覆盖原来的值。
        ②accumulate()方法,向json对象和数组中的某字段追加相应值,不会覆盖原来的值。
JSONArray类:
        add()方法,和org.json包中JSONArrray类的put()方法类似,在json数组末尾追加元素,也可以在指定位置追加。
 package jsonlib;
 import java.util.HashMap;
 import java.util.Map;
 import net.sf.json.*;
 public class JsonlibTest {
     public static void main(String[] args) {
         Map<string object=""> map = new HashMap<string object="">();
         map.put("name", "JTZen9");
         map.put("age", 21);
         Student student = new Student();
         student.setAge(21);
         student.setName("JTZen9");
         student.setSex("male");

         JSONObject jsonObject = new JSONObject();
         jsonObject.put("name", "JTZen9");
         System.out.println(jsonObject);
         jsonObject.put("student", student);
         System.out.println(jsonObject);

         JSONArray jsonArray = new JSONArray();
         jsonArray.add("JTZen9");
         jsonArray.add(map);
         jsonArray.add(0,student); //在指定位置加入
         System.out.println(jsonArray);
     }
 }
运行结果:
json-lib包构造json对象和数组,还有一个element()方法,在JSONObject类中与put()类似,在JSONArray类中与add()类似,更具体的差别往后有深入研究在继续记录。

3.JSON数据解析

        json-lib包中使用JSONObject和JSONArray类解析json数据与org.json包类似,同样是使用各种getXXX()方法和optXXX()方法。
        ①getXXX()方法:如getJSONObject、getJSONArray、getInt等,如果key不存在的话,就会抛出异常。
        ②optXXX()方法:如optBoolean、optString、optInt等,如果包含key这个字段,那么返回这个字段的值,否则返回一个默认值。
 package jsonlib;
 import net.sf.json.*;
 public class JsonlibTest {
     public static void main(String[] args) {
         String jsonData = "{'name':'JTZen9','age':21}";
         JSONObject jsonObject = JSONObject.fromObject(jsonData);
         System.out.println(jsonObject);
         String nameStr = jsonObject.getString("name");
         System.out.println(nameStr);
         int ageInt = jsonObject.optInt("age");
         System.out.println(ageInt);

         String sexStr1 = jsonObject.optString("sex");
         System.out.println("optString('sex')输出的:" + sexStr1); //默认值为空
         String sexStr2 = jsonObject.getString("sex");
         System.out.println(sexStr2);      //报错
     }
 }
输出结果:
        因为有的时候,抛出异常会出现各种error信息,影响用户体验或者影响开发员人的下一步操作,所以这种时候就最好是使用optXXX()方法。

Java创建和解析Json数据方法(三)——json-lib包的使用的更多相关文章

  1. Java创建和解析Json数据方法——org.json包的使用(转)

    org.json包的使用 1.简介   工具包org.json.jar,是一个轻量级的,JAVA下的json构造和解析工具包,它还包含JSON与XML, HTTP headers, Cookies, ...

  2. Java学习-029-JSON 之三 -- 模仿 cssSelector 封装读取 JSON 数据方法

    前文简单介绍了如何通过 json-20141113.jar 提供的功能获取 JSON 的数据,敬请参阅:Java学习-028-JSON 之二 -- 数据读取. 了解学习过 JQuery 的朋友都知道, ...

  3. JS解析json数据并将json字符串转化为数组的实现方法

    json数据在ajax实现异步交互时起到了很重要的作用,他可以返回请求的数据,然后利用客户端的js进行解析,这一点体现出js的强大,本文介绍JS解析json数据并将json字符串转化为数组的实现方法, ...

  4. Jquery Ajax和getJSON获取后台普通Json数据和层级Json数据解析

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. JS:字符串转成json数据,和json转成字符串方法 iframe获取父级传过来的数据

    字符串转成json数据,和json转成字符串方法 //转为JSON adinfo=JSON.parse(adinfo) //转为字符串 adinfo=JSON.stringify(adinfo) 大概 ...

  6. 如何构建JSON数据,JSON数据的格式,JSON数据的获取

    假设你是用$.getJSON();方法获取JSON数据$.getJSON(url,{"Action":"getStudent"},function(data){ ...

  7. HttpServletResponse 返回的json数据不是json字符串,而是json对象

    今天在改一个bug 情况: 在spring boot中写了一个类Result ,用来统一封装 各个API响应结果 , 其中重写了toString()方法来返回 json字符串 . 在正常情况下,从其它 ...

  8. Java创建和解析Json数据方法(四)——json-lib包的使用

    (四)json-lib包的使用         既然json-lib包比org.json包重量级,那么json-lib包肯定有很多org.json包没有的类和方法,这篇笔记简单记录json-lib包中 ...

  9. Java创建和解析Json数据方法(二)——org.json包的使用

    (二)org.json包的使用 1.简介   工具包org.json.jar,是一个轻量级的,JAVA下的json构造和解析工具包,它还包含JSON与XML, HTTP headers, Cookie ...

随机推荐

  1. stm32F4中断分析-HAL库

    详细可以参考: STM32使用HAL库操作外部中断——实战操作 https://www.cnblogs.com/wt88/p/9624103.html /** ******************** ...

  2. 关于.ascx

    .ascx用户控件  参考系列教程User controls in asp.net - Part 104 用户控件包含了html.代码和其他Web或者用户控件的组合,并在Web服务器上以自己的文件格式 ...

  3. HDU 4990 Reading comprehension 矩阵快速幂

    题意: 给出一个序列, \(f_n=\left\{\begin{matrix} 2f_{n-1}+1, n \, mod \, 2=1\\ 2f_{n-1}, n \, mod \, 2=0 \end ...

  4. 用asp.net+Jquery+Ajax+sqlserver编写的 (英语六级记单词)

    开始(英语对程序员的重要性引用) 出处 英语的重要性已经毋庸置疑,对于程序员来说更甚,一些最新的技术资料是英文的,如果想进入外企英语也是一个很重要的条件.对于程序员来说怎样学习好英语,在此谈一下我的一 ...

  5. Leetcode23--->Merge K sorted Lists(合并k个排序的单链表)

    题目: 合并k个排序将k个已排序的链表合并为一个排好序的链表,并分析其时间复杂度 . 解题思路: 类似于归并排序的思想,lists中存放的是多个单链表,将lists的头和尾两个链表合并,放在头,头向后 ...

  6. 解读Loadrunner网页细分图(Web Page Diagnostics)

    [转载的地址]https://www.cnblogs.com/littlecat15/p/9456376.html 一.启用网页细分图 首先在Controller场景设计运行之前,需要在菜单栏中设置D ...

  7. dev c++ 提示没有iostream.h文件

    dev c++ 提示没有iostream.h文件 解决办法路径没有打通最好是这样写:#include <iostream>using namespace std;int main(int ...

  8. LR采用的Sigmoid函数与最大熵(ME) 的关系

    LR采用的Sigmoid函数与最大熵(ME) 的关系 从ME到LR 先直接给出最大熵模型的一般形式,后面再给出具体的推导过程. \[\begin{align*} P_w(y|x) &= \df ...

  9. Django底层原理简介与安装

    Django环境目录搭建一栏: 利用wsgiref模块封装好的socket搭建服务端: #利用wsgiref模块封装好的socket演示操作(例如accept\recv) #也可以实现socket服务 ...

  10. phpcms调用一个指定的栏目

    很多初学者在学习phpcms的时候在模板中都是静态的写导航的url,那样在后期维护的时候可是个巨大的工程啊,所以我在学的时候就想起织梦是能指定调用栏目的url,借鉴了这一想法, {$CATEGORY[ ...