Java-json系列(二):用JSONObject解析和处理json数据

本文中主要介绍JSONObject处理json数据时候的一些常用场景和方法。

(一)jar包下载

所需jar包打包下载百度网盘地址:https://pan.baidu.com/s/1c27Uyre

(二)常见场景及处理方法

1、解析简单的json字符串:

1      // 简单的json测试字符串
2         public static final String JSON_SIMPLE = "{‘name‘:‘tom‘,‘age‘:16}";
3
4         JSONObject obj = JSONObject.fromObject(JSON_SIMPLE);
5         System.out.println("name is : " + obj.get("name"));
6         System.out.println("age is : " + obj.get("age"));

输出:

name is : tom
age is : 16

2、解析嵌套的json字符串:

1      // 嵌套的json字符串
2         public static final String JSON_MULTI = "{‘name‘:‘tom‘,‘score‘:{‘Math‘:98,‘English‘:90}}";
3         JSONObject obj = JSONObject.fromObject(JSON_MULTI);
4         System.out.println("name is : " + obj.get("name"));
5         System.out.println("score is : " + obj.get("score"));
6
7         JSONObject scoreObj = (JSONObject) obj.get("score");
8         System.out.println("Math score is : " + scoreObj.get("Math"));
9         System.out.println("English score is : " + scoreObj.get("English"));

输出:

name is : tom
score is : {"English":90,"Math":98}
Math score is : 98
English score is : 90

3、把bean对象转化成JSONObject对象:

Person、Info、Score类分别如下:(注:要定义成独立的三个public类,不能定义成内部类或非public类,否则会转换异常)

 1 public class Person {
 2     private String name;
 3
 4     private Info info;
 5
 6     public String getName() {
 7         return name;
 8     }
 9
10     public void setName(String name) {
11         this.name = name;
12     }
13
14     public Info getInfo() {
15         return info;
16     }
17
18     public void setInfo(Info info) {
19         this.info = info;
20     }
21
22     @Override
23     public String toString() {
24         return "Person [name=" + name + ", info=" + info + "]";
25     }
26
27 }
 1 public class Info {
 2     private int age;
 3     private Score score;
 4
 5     public int getAge() {
 6         return age;
 7     }
 8
 9     public void setAge(int age) {
10         this.age = age;
11     }
12
13     public Score getScore() {
14         return score;
15     }
16
17     public void setScore(Score score) {
18         this.score = score;
19     }
20
21     @Override
22     public String toString() {
23         return "Info [age=" + age + ", score=" + score + "]";
24     }
25
26 }
 1 public class Score {
 2     private String math;
 3     private String english;
 4
 5     public String getMath() {
 6         return math;
 7     }
 8
 9     public void setMath(String math) {
10         this.math = math;
11     }
12
13     public String getEnglish() {
14         return english;
15     }
16
17     public void setEnglish(String english) {
18         this.english = english;
19     }
20
21     @Override
22     public String toString() {
23         return "Score [math=" + math + ", english=" + english + "]";
24     }
25
26 }

转换方法:

 1         Score score = new Score();
 2         score.setEnglish("A");
 3         score.setMath("B");
 4
 5         Info info = new Info();
 6         info.setAge(20);
 7         info.setScore(score);
 8
 9         Person person = new Person();
10         person.setInfo(info);
11         person.setName("Tim");
12
13         JSONObject obj = JSONObject.fromObject(person);
14         System.out.println(obj.toString());

输出:

{
    "name": "Tim",
    "info": {
        "score": {
            "english": "A",
            "math": "B"
        },
        "age": 20
    }
}

4、把json数组转换成JsonObject数组:

 1         // 数组形式的json
 2         public static final String JSON_ARRAY = "[{‘name‘:‘tom‘},{‘name‘:‘john‘,‘age‘:20},{}]";
 3
 4         JSONArray arr = JSONArray.fromObject(JSON_ARRAY);
 5         System.out.println(arr);
 6
 7         for (int i = 0; i < arr.size(); i++) {
 8             JSONObject obj = arr.getJSONObject(i);
 9             System.out.println(obj.toString());
10         }

输出:

[{"name":"tom"},{"name":"john","age":20},{}]
{"name":"tom"}
{"name":"john","age":20}
{}

5、构造一个json字符串:

 1         JSONObject obj = new JSONObject();
 2         obj.put("name", "tom");
 3         obj.put("age", 19);
 4
 5         // 子对象
 6         JSONObject objContact = new JSONObject();
 7         objContact.put("tel", "123456");
 8         objContact.put("email", "[email protected]");
 9         obj.put("contact", objContact);
10
11         // 子数组对象
12         JSONArray scoreArr = new JSONArray();
13         JSONObject objEnglish = new JSONObject();
14         objEnglish.put("course", "english");
15         objEnglish.put("result", 100);
16         objEnglish.put("level", "A");
17
18         JSONObject objMath = new JSONObject();
19         objMath.put("course", "math");
20         objMath.put("result", 50);
21         objMath.put("level", "D");
22
23         scoreArr.add(objEnglish);
24         scoreArr.add(objMath);
25
26         obj.put("score", scoreArr);
27
28         System.out.println(obj.toString());

输出:

{
    "score": [
        {
            "result": 100,
            "level": "A",
            "course": "english"
        },
        {
            "result": 50,
            "level": "D",
            "course": "math"
        }
    ],
    "contact": {
        "tel": "123456",
        "email": "[email protected]"
    },
    "name": "tom",
    "age": 19
}

思考:输出的json中的字段的顺序有没有办法设置?

时间: 2024-10-29 03:27:46

Java-json系列(二):用JSONObject解析和处理json数据的相关文章

java多线程系列(二)

对象变量的并发访问 前言:本系列将从零开始讲解java多线程相关的技术,内容参考于<java多线程核心技术>与<java并发编程实战>等相关资料,希望站在巨人的肩膀上,再通过我的理解能让知识更加简单易懂. 目录 认识cpu.核心与线程 java多线程系列(一)之java多线程技能 java多线程系列(二)之对象变量的并发访问 java多线程系列(三)之等待通知机制 java多线程系列(四)之ReentrantLock的使用 线程安全 线程安全就是多线程访问时,采用了加锁机制,当一个

Json系列之三 让你打印完美的json格式

public static String format(String jsonStr) { int level = 0; StringBuffer jsonForMatStr = new StringBuffer(); for(int i=0;i<jsonStr.length();i++){ char c = jsonStr.charAt(i); if(level>0&&'\n'==jsonForMatStr.charAt(jsonForMatStr.length()-1)){

JAVA通信系列二:mina入门总结

一.学习资料 Mina入门实例(一) http://www.cnblogs.com/juepei/p/3939119.html Mina入门教程(二)----Spring4 集成Mina http://www.cnblogs.com/juepei/p/3940396.html Apache Mina 入门实例--创建一个MINA时间服务http://loftor.com/archives/apache-mina-quick-start-guide.html MINA2.0用户手册中文版--系列文

Java学习系列(二十四)Java正则表达式详解

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/45501777 前言 正则表达式可以说是用来处理字符串的一把利器,它是一个专门匹配n个字符串的字符串模板,本质是查找和替换.在实例演示之前先了解一下Pattern.Matcher这两个工具类,Pattern:编译好的带匹配的模板(如:Pattern.compile("[a-z]{2}");/ / 取2个小写字母):Matcher:匹配目标字符串后产生的结果(如:pattern.m

死磕 java线程系列之ForkJoinPool深入解析

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本. 注:本文基于ForkJoinPool分治线程池类. 简介 随着在硬件上多核处理器的发展和广泛使用,并发编程成为程序员必须掌握的一门技术,在面试中也经常考查面试者并发相关的知识. 今天,我们就来看一道面试题: 如何充分利用多核CPU,计算很大数组中所有整数的和? 剖析 单线程相加? 我们最容易想到就是单线程相加,一个for循环搞定. 线程池相加? 如果进一步优化,我们会自然而然地想到使用线程池来分段相加,最后

{Java初级系列二}---------Java类基础知识

本人为自学Java系列,内容来自于中国大学mooc华东师范大学陈育良教授<Java核心技术>,在此感谢老师! 一:Java类结构和main函数 Java文件只能有一个public class Public class的名字还必须和文件名一致 文件可以有多个class,但是只能有一个是public.不提倡一个文件里面放着多个类(内部类除外)-------这个先记住,我们后面再贴代码理解 public?class?IntegerTest?{?? ?????//?PSVM?为函数入口??main函数

Java学习系列(二十三)Java面向对象之内部类详解

一.前言 内部类也称寄生类,就是把一个类放在类里面(即内部类的上一级程序单元是类)定义,将其作为外部类的成员.内部类主要用几种定义形式:静态(static)内部类,非静态内部类,匿名内部类(也就是没有名字的寄生类).内部类的好处就是内部类可以直接外部类的(包括私有)成员,反之不能.下面我们通过一些实例来详细讲解一下Java中内部类的使用及几种定义形式的相互调用. 二.实例说明 (1)匿名内部类:当程序创建匿名内部类时,会立即创建匿名内部类(实现类)的实例. interface IBreathe

Java学习系列(二十一)Java面向对象之注解详解

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/45295947 一.前言 Java中的注解Annotation运用到很多方面,比如之前讲的单元测试中的@Test.Spring.SpringMVC还有其他框架等等.Java本身自带的注解也有一些,比如:@Override(子类要重写/覆写父类的对应方法).@Deprecated(表示方法不建议被使用).@SuppressWarnings(抑制警告)等等.当然,我们也可以自定义一些自己需要的

带你玩转java多线程系列 二 Thread 和 Runnable

Thread 和 Runnable 1 Runnable是接口,而Thread是继承,可以同时实现多个接口,但是不能同时继承多个类 2 Runnable比Thread灵活的多 当我们使用Runnable测试多线程非常简单,因为Runnable是对Thread的进一步解耦 我们首先建立一个类记做为Model,实现Runnable接口,在类里建立一个实例变量,接着覆盖run方法. 我们重新建立一个含有main函数的类,在该类中我们首先建立一个Model类型的实例变量model,接着将该Runnabl