java中json数据生成和解析(复杂对象演示)

时间:2022-09-01 17:40:51

1.json简单介绍

  1.1 json是最流行和广泛通用的数据传输格式,简称JavaScript Object Notation,最早在JavaScript中使用.

  1.2 举个例子,下面是一个json对象,名字叫王尼玛,他有两个粉丝组成数组,一个叫小王,一个叫小尼玛:

    {

      "name":"王尼玛",

      "fans":[{

            "name":"小王",

            "age":"7"

           },{

            "name":"小尼玛",

            "age":"10"

           }]

      }

2.json数据生成和解析

  2.1 关于json处理的包有好几类,开源jackson,谷歌Gson,阿里巴巴的Fastjson.Gson功能强大,但是Fastjson性能更快.如何选择见仁见智就行

  2.2 这里我开始都是用org.json,后面为了演示复杂json转java bean又导入了功能强大的Gjson,先附上两个maven依赖:

    <!-- https://mvnrepository.com/artifact/org.json/json -->
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20160810</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.7</version>
</dependency>

  2.3 json数据的生成,也就是各种类型转json.(String,map和java bean)

DemoCreateJson.java
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; /**
* Created by garfield on 2016/10/16.
* 举三种创建json的例子
*/
public class DemoCreateJson {
public static void main(String[] args) {
StringCreateJson();
mapCreateJson();
beanCreateJson();
}
//String创建json
/**
* {
      "name":"王尼玛",
      "fans":[{
            "name":"小王",
            "age":"7"
           },{
            "name":"小尼玛",
            "age":"10"
           }]
      }
*/
static void StringCreateJson(){
JSONObject jsonObject = new JSONObject();
jsonObject.put("name","王尼玛"); //粉丝是个数组,其实就是嵌套json
JSONObject jsonObject1 = new JSONObject();
jsonObject1.put("name","小王");
jsonObject1.put("age",7); JSONObject jsonObject2 = new JSONObject();
jsonObject2.put("name","小尼玛");
jsonObject2.put("age",10); //从此处可以看出其实list和json也是互相转换的
List<JSONObject> jsonObjects = new ArrayList<JSONObject>();
jsonObjects.add(jsonObject1);
jsonObjects.add(jsonObject2);
jsonObject.put("fans",jsonObjects); System.out.println("jsonObject直接创建json:" + jsonObject);
}
//第二种方法,用map方式
static void mapCreateJson(){
Map<String,Object> map = new HashMap<String,Object>();
map.put("name","王尼玛");
Map<String,Object> map1 = new HashMap<String,Object>();
map1.put("name","小王");
map1.put("age",7);
Map<String,Object> map2 = new HashMap<String,Object>();
map2.put("name","小尼玛");
map2.put("age",10);
List<Map> jsonObjects = new ArrayList<Map>();
jsonObjects.add(map1);
jsonObjects.add(map2);
map.put("fans",jsonObjects);
System.out.println("集合中Map创建json对象:" + new JSONObject(map));
}
//第三种,也是比较常用的,用bean转换,(这里用的是map作为子json,如果必须要创建复杂bean对象,建议用Gjson操作)
static void beanCreateJson(){
Actor actor = new Actor();
actor.setName("王尼玛");
Map<String,Object> map1 = new HashMap<String,Object>();
map1.put("name","小王");
map1.put("age",7);
Map<String,Object> map2 = new HashMap<String,Object>();
map2.put("name","小尼玛");
map2.put("age",10);
List<Map> maps = new ArrayList<Map>();
maps.add(map1);
maps.add(map2);
actor.setFans(maps);
System.out.println("java bean创建json对象:" + new JSONObject(actor));
}
}

    2.3.1上面类缺少基本bean

Actor.java

import java.util.List;
import java.util.Map; /**
* Created by garfield on 2016/10/16.
*/
public class Actor {
private String name;
private List<Map> fans; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public List<Map> getFans() {
return fans;
} public void setFans(List<Map> fans) {
this.fans = fans;
} }

  2.4 json的解析,这里写了两种解析方式,同样,比较常用的还是第二种,json转java bean

DemoParseJson.java

import com.google.gson.*;
import org.json.JSONObject; import java.util.Map; /**
* Created by garfield on 2016/10/16.
*/
public class DemoParseJson {
public static void main(String[] args) {
String jsonString = "{\"fans\":[{\"name\":\"小王\",\"age\":7},{\"name\":\"小尼玛\",\"age\":10}],\"name\":\"王尼玛\"}";
normalParse(jsonString);
beanParse(jsonString);
}
static void normalParse(String jsonString){
JSONObject jsonObject = new JSONObject(jsonString);
//获取普通属性
System.out.println("姓名:");
System.out.println(" " + jsonObject.getString("name"));
//获取数组
System.out.println("粉丝:");
for (Object fan : jsonObject.getJSONArray("fans")) {
JSONObject object = (JSONObject)fan;
System.out.println(" 姓名:" + object.get("name") + ",年龄:" + object.get("age"));
}
}
//org.json并不支持这种复杂的bean转换,所以这边又导入了gson的包
static void beanParse(String jsonString){
System.out.println("=========Gson解析=========");
JsonObject obj = new JsonParser().parse(jsonString).getAsJsonObject();
Actor actor = new Gson().fromJson(obj,Actor.class);
System.out.println("姓名:");
System.out.println(" " + obj.get("name"));
System.out.println("粉丝:");
for (Map map : actor.getFans()) {
System.out.println(" 姓名:" + map.get("name") + "年龄:" + map.get("age"));
}
}
}

  2.4.1顺便附上执行结果:

姓名:
王尼玛
粉丝:
姓名:小王,年龄:7
姓名:小尼玛,年龄:10
=========Gson解析=========
姓名:
"王尼玛"
粉丝:
姓名:小王年龄7.0
姓名:小尼玛年龄10.0

ok,that's it...

java中json数据生成和解析(复杂对象演示)的更多相关文章

  1. Java中json的构造和解析

    什么是 Json? JSON(JvaScript Object Notation)(官网网站:http://www.json.org/)是 一种轻量级的数据交换格式.  易于人阅读和编写.同时也易于机 ...

  2. java中json的使用和解析

    1.创建json对象 1.1 创建JSONObject对象 使用map初始化json @Test public void test1() { Map<String, Object> map ...

  3. 通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来的Json数据写入数据库表中

    摘自:http://blog.csdn.net/mazhaojuan/article/details/8592015 通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来 ...

  4. QT json字符串生成和解析

    1         QT json字符串生成和解析 1.1  QT Json解析流程 (1)  字符串转化为QJsonDocument QJsonParseError json_error; QJso ...

  5. Java中JSON字符串与java对象的互换实例详解

    这篇文章主要介绍了在java中,JSON字符串与java对象的相互转换实例详解,非常不错,具有参考借鉴价值,需要的朋友可以参考下 在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JS ...

  6. java中 json和bean list map之间的互相转换总结

    JSON 与 对象 .集合 之间的转换 JSON字符串和java对象的互转[json-lib]   在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级 ...

  7. (转)Java中JSON字符串与java对象的互换实例详解

    在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级的数据格式比xml效率要高,XML需要很多的标签,这无疑占据了网络流量,JSON在这方面则做的很好, ...

  8. Java中XML数据

    Java中XML数据 XML解析——Java中XML的四种解析方式 XML是一种通用的数据交换格式,它的平台无关性.语言无关性.系统无关性.给数据集成与交互带来了极大的方便.XML在不同的语言环境中解 ...

  9. Java中JSON字符串与java对象的互换实例详解(转)

    http://www.jb51.net/article/90914.htm 在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级的数据格式比xml效率要 ...

随机推荐

  1. HTML 5 拖放&lpar;Drag 和drop&rpar;

    浏览器支持 Internet Explorer 9.Firefox.Opera 12.Chrome 以及 Safari 5. 1.把标签 draggable 属性设置为 true. 2.向标签添加on ...

  2. 摘抄的 JAVA JDOM 操作XML文件

    JDOM修炼篇 用过XERCES的程序员都会感到,有时候用一句话就可以说清楚的事,当用XERCES的API来实现时,要三四行程序.   回页首 获得并安装JDOM 在 http://www.jdom. ...

  3. C&num;编程语言与面向对象——核心

    面向对象的核心 (1).封装 封装的类=数据+对此数据所进行的操作(即算法) 封装起外界不必需要知道的东西,指向外界展现可供展示的东西. 小到一个简单的数据结构,大到一个完整的软件子系统.静态的如某软 ...

  4. HDU 3037 Saving Beans(Lucas定理模板题)

    Problem Description Although winter is far away, squirrels have to work day and night to save beans. ...

  5. Android 反编译apk 详解

    测试环境: win 7 使用工具: CSDN上下载地址: apktool (资源文件获取)  下载          dex2jar(源码文件获取) 下载        jd-gui  (源码查看)  ...

  6. DF学Mysql(三)——索引操作

    概要: 数据库对象索引其实与书的目录非常相似,主要是为了提高从表中检索数据的速度. 由于数据存储在数据库表中,所以索引是创建在数据库表对象上的,由表中的一个字段或多个字段生成的键组成,这些键存储在数据 ...

  7. MyBatis学习总结&lowbar;13&lowbar;Mybatis查询之resultMap和resultType区别

    MyBatis的每一个查询映射的返回类型都是ResultMap,只是当我们提供的返回类型属性是resultType的时候,MyBatis对自动的给我们把对应的值赋给resultType所指定对象的属性 ...

  8. Xcode 中添加 &period;pch文件

    1  新建工程 2  创建  .pch文件 3   在setting里面进行设置:

  9. js清空页面控件值

    function funClear() {var txts = document.getElementsByTagName("input");for (var i = 0; i & ...

  10. node&period;js 中回调函数callback&lpar;转载&rpar;&comma;说的很清楚&comma;看一遍就理解了

    最近在看 express,满眼看去,到处是以函数作为参数的回调函数的使用.如果这个概念理解不了,nodejs.express 的代码就会看得一塌糊涂.比如: 复制代码 代码如下: app.use(fu ...