1.创建json对象

1.1 创建JSONObject对象

使用map初始化json

@Testpublic voidtest1()

{

Map map = new LinkedHashMap();

map.put("name", "孙笑川");

map.put("age", 25);

map.put("height", 1.70);

map.put("major", new String[] { "理发", "挖掘机"});

map.put("hasGirlFriend", false);

map.put("car", null);

map.put("house", null);//null作为value时,转换成json后不会保存

JSONObject json1 = newJSONObject(map);

System.out.println(json1.toString());

Map map2=json1.toMap();

System.out.println(map2.toString());

}

可以看到,当value为null时,转化为json后不会保存,会直接抛弃。

使用javabean初始化json

//javaBean

classPerson {publicString name;public intage;publicString idCard;//省略getter&setter

}//使用javaBean初始化json

@Testpublic voidtest2()

{

Person person= newPerson();

person.setName("孙亚龙");

person.setAge(30);

person.setIdCard("512445546565164641212");

JSONObject json2= newJSONObject(person);

System.out.println(json2.toString());

}

直接创建JSONObject

@Testpublic voidtest3()

{

JSONObject json3= newJSONObject();

Object nullObj= null;

json3.put("name", "孙悟空");

json3.put("changeTimes", 72);

json3.put("name", "MonkeySun"); //put方法:value保留原格式,若key相等,value会覆盖原值

json3.put("isHuman", false);

json3.append("nickName", "齐天大圣"); //append方法:value存放在数组中,若key相等,value会覆盖原值

json3.append("nickName", "弼马温");

json3.accumulate("Teacher", "元始天尊"); //accmulate方法,和append方法一样

json3.accumulate("Teacher", "唐三藏");

System.out.println(json3.toString());

}

1.2 创建JSONArray对象

直接从字符串获取:

用给定的字符串初始化JSONArray对象,字符串最外层必须为中括号包裹:

@Testpublic voidtest12()

{

String jsonString= "['white','卢本伟','芦苇','卢姥爷']";

JSONArray jsonArray= newJSONArray(jsonString);for(Object object : jsonArray) {

System.out.println(object);

}

}

直接创建JSONArray对象:

创建一个空的JSONArray对象,使用put传值

@Testpublic voidtest_1()

{

JSONArray jsonArray= newJSONArray();//1.put(value)方法

jsonArray.put("孙悟空");//2.put(index value)方法

jsonArray.put(1,"{'变化':72,'武器',金箍棒}");

System.out.println(jsonArray);

}

2.解析json

2.1 官方json包解析

使用官方json包解析时,需要下载json官方jar包,并导入

导入jar包:

importorg.json.JSONArray;import org.json.JSONObject;

待解析的字符串是简单对象类型,被大括号 { }包围时:

@Testpublic voidtest6()

{//待解析的json字符串

String jsonString = "{'name':'卢本伟','age':24,'Position':'Mid'}";//因为json字符串是大括号包围,所以用JSONObject解析

JSONObject json = newJSONObject(jsonString);

String name= json.getString("name");int age = json.getInt("age");

String position= json.getString("Position");

System.out.println("姓名:"+name);

System.out.println("年龄:"+age);

System.out.println("位置"+position);

}

待解析的字符串是数组类型,被中括号 [  ]  包围时:

@Testpublic voidtest7()

{//待解析的json字符串

String jsonString = "['卢本伟','white','卢伟','五五开']";//因为json字符串是大括号包围,所以用JSONArray解析

JSONArray jsonArray = newJSONArray(jsonString);//遍历即可,foreach或for循环

for(Object name : jsonArray) {

System.out.println(name);

}

}

待解析的字符串既有中括号 [  ]、又有大括号[  ] 包围时,逐层解析

@Testpublic voidtest5()

{//待解析的json字符串

String jsonString = "{'name':'卢本伟','age':24,'Hero':{'name':'Fizz','Position':'Mid','charactor':'killer'},'nickNames':['五五开','芦苇','white'],'Honors':[{'year':2011,'name':'TGA总决赛冠军'},{'year':2013,'name':'S3全球总决赛中国区冠军'},{'year':2013,'name':'S3全球总决赛亚军'}]}";try{//因为json字符串是大括号包围,所以用JSONObject解析

JSONObject json = newJSONObject(jsonString);/** 普通元素,根据类型直接获取*/String name= json.getString("name");int age = json.getInt("age");

System.out.println("姓名:"+name);

System.out.println("年龄:"+age);

System.out.println("————————————————————————————————");/** 属性大括号包括,先获取JSONObject对象*/JSONObject hero= json.getJSONObject("Hero");

String hero_name= hero.getString("name");

String hero_position= hero.getString("Position");

String hero_charactor= hero.getString("charactor");

System.out.println("擅长英雄:");

System.out.println("英雄名:"+hero_name);

System.out.println("位置:"+hero_position);

System.out.println("英雄定位:"+hero_charactor);

System.out.println("————————————————————————————————");/** 属性被中括号包括,获取JSONArray对象,遍历即可*/System.out.println("外号:");

JSONArray nickNames= json.getJSONArray("nickNames");for(Object nickName : nickNames) {

System.out.println(nickName);

}

System.out.println("————————————————————————————————");/** 属性中既有中括号包括,又嵌套了大括号,一层层获取即可*/JSONArray Honors= json.getJSONArray("Honors");

System.out.println("所获荣誉:");for(int i=0;i

{

JSONObject honor=Honors.getJSONObject(i);int honor_year = honor.getInt("year");

String honor_name= honor.getString("name");

System.out.println(honor_year+" : "+honor_name);

}

}catch(Exception e)

{

System.out.println(e.getMessage());

}

}

2.2 fastjson解析

fastjson是阿里巴巴开源产品之一,解析速度快。

JSON字符串是简单对象类型,被大括号包围:

当待解析的JSON字符串是简单对象类型的,即用大括号包围,此时采用JSONObject对象来处理:

@Testpublic voidtest3()

{//简单对象类型

String jsonStr = "{'name':'Misaya','position':'Mid','hero':':Twisted Fate'}";

JSONObject json=JSON.parseObject(jsonStr);

String name= json.getString("name");

System.out.println(name);

System.out.println(json);

}

JSON字符串是数组类型,被中括号包围

当待解析的JSON字符串是简单数组类型的,即用中括号包围,此时采用JSONArray对象来处理:

@Testpublic voidtest4()

{//数组类型

String jsonStr = "['元旦','五一','国庆','春节']";

JSONArray json=JSON.parseArray(jsonStr);

String first= (String) json.get(0);

System.out.println(first);

System.out.println(json);

}

JSON字符串为混合类型,既有简单对象,又有数组,逐层解析

@Testpublic voidtest5()

{//混合类型

String jsonStr = "[{'name':'元旦','vacation':'3'},{'name':'五一','vacation':'7'},{'name':'国庆','vacation':'7'}]";

JSONArray jsonArr=JSON.parseArray(jsonStr);

JSONObject jsonObj1= jsonArr.getJSONObject(0);

System.out.println(jsonObj1);

}

JSON字符串有对应的类时,对象的解析:

1 /**

2 * @Author {LearnAndGet}3 * @Time 2018年11月24日4 * @Discription:5 */

6 importjava.util.Arrays;7 importjava.util.HashMap;8

9 public classPlayer {10 privateString name;11 private intage;12 private HashMap Hero = new HashMap();13 privateString[] nickNames;14 privateHonor[] Honors;15

16 publicString getName() {17 returnname;18 }19

20 public voidsetName(String name) {21 this.name =name;22 }23

24 public intgetAge() {25 returnage;26 }27

28 public void setAge(intage) {29 this.age =age;30 }31

32 publicHashMap getHero() {33 returnHero;34 }35

36 public voidsetHero(HashMap hero) {37 Hero =hero;38 }39

40 publicString[] getNickNames() {41 returnnickNames;42 }43

44 public voidsetNickNames(String[] nickNames) {45 this.nickNames =nickNames;46 }47

48 publicHonor[] getHonors() {49 returnHonors;50 }51

52 public voidsetHonors(Honor[] honors) {53 Honors =honors;54 }55

56

57 @Override58 publicString toString() {59 return "Player [name=" + name + ", age=" + age + ", Hero=" + Hero + ", nickNames=" +Arrays.toString(nickNames)60 + ", Honors=" + Arrays.toString(Honors) + "]";61 }62

63

64 static classHonor65 {66 intyear;67 String name;68 public intgetYear() {69 returnyear;70 }71 public void setYear(intyear) {72 this.year =year;73 }74 publicString getName() {75 returnname;76 }77 public voidsetName(String name) {78 this.name =name;79 }80 @Override81 publicString toString() {82 return "Honor [year=" + year + ", name=" + name + "]";83 }84 }85

86

87 }

View Code

@Testpublic voidJson2Obj()

{//待解析的json字符串

String jsonString = "{'name':'卢本伟','age':24,'Hero':{'name':'Fizz','Position':'Mid','charactor':'killer'},'nickNames':['五五开','芦苇','white'],'Honors':[{'year':2011,'name':'TGA总决赛冠军'},{'year':2013,'name':'S3全球总决赛中国区冠军'},{'year':2013,'name':'S3全球总决赛亚军'}]}";

Player p= JSON.parseObject(jsonString, Player.class);

System.out.println(p);

}

2.3 jackson解析

解析普通属性

@Testpublic voidgetCustomProp()

{

String jsonStr= "{\"price\":5000,\"count\":100,\"function\":[{\"name\":\"camera\",\"config\":1500},{\"name\":\"music\",\"config\":2000}]}";try{

ObjectMapper objMap= newObjectMapper();

JsonNode root=objMap.readTree(jsonStr);//在根节点上的属性

int price = root.path("price").asInt();int count = root.path("count").asInt();

System.out.println("price"+":"+price);

System.out.println("count"+":"+count);//在叶子节点上的属性

JsonNode node = root.path("function");

String fun1_name= node.path(0).path("name").asText();int fun1_config = node.path(0).path("config").asInt();

System.out.println("function1:"+fun1_name+":"+fun1_config);

String fun2_name= node.path(1).path("name").asText();int fun2_config = node.path(1).path("config").asInt();

System.out.println("function2:"+fun2_name+":"+fun2_config);

}catch(Exception ex)

{

System.out.println(ex.getMessage());

}

}

解析对象字符串

//省略javaBean:Person的代码

@Testpublic voidjson2obj()

{

String jsonStr= "{\"name\":\"二狗\",\"age\":15,\"idCard\":\"42125\"}";try{

ObjectMapper objMapper= newObjectMapper();

//当反序列化json时,未知属性会引起的反序列化被打断,这里我们禁用未知属性打断反序列化功能

objMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false);

Person p= objMapper.readValue(jsonStr, Person.class);

System.out.println(p);

}catch(Exception e)

{

System.out.println(e.getMessage());

}

}

解析对象数组构成的字符串

//省略 javaBean:Person代码/** 解析对象数组构成的String*/@Testpublic voidjackSonTest()

{

String jsonStr= "[{\"name\":\"二狗\",\"age\":15,\"idCard\":\"42125\"},{\"name\":\"铁柱\",\"age\":12,\"idCard\":\"46521\"}]";try{

ObjectMapper mapper= newObjectMapper();

TreeNode treeNode=mapper.readTree(jsonStr);

List persons = mapper.readValue(jsonStr, new TypeReference>(){});for(Person person : persons)

{

System.out.println(person);

}

}catch(Exception e)

{

System.out.println(e.getMessage());

}

}

java的json解析_java中json的使用和解析相关推荐

  1. java中将json字符串_Java中JSON字符串与java对象的互换实例详解

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

  2. java list 对象 json字符串_Java中Json字符串直接转换为对象的方法(包括多层List集合)...

    使用到的类:net.sf.json.JSONObject 使用JSON时,除了要导入JSON网站上面下载的json-lib-2.2-jdk15.jar包之外,还必须有其它几个依赖包:commons-b ...

  3. java中json数据_Java中json的使用 解析json数据

    1.java提取json嵌套多层的数据 json数据为: { "res": [{ "name": "0", "text" ...

  4. java字符串转json取集合_Java中Json字符串直接转换为对象的方法(包括多层List集合)...

    使用到的类:net.sf.json.JSONObject 使用JSON时,除了要导入JSON网站上面下载的json-lib-2.2-jdk15.jar包之外,还必须有其它几个依赖包:commons-b ...

  5. java中怎么使用json数据_JAVA中使用JSON进行数据传递

    1.是不是只有xml传递数据的技术才是webservice? 可以这么理解.webservice是基于SOAP协议,SOAP协议是基于XML的文本协议.所以webservice可以简单理解为是基于XM ...

  6. java json 易用_Java中 Json的使用

    Java JSON 本章节我们将为大家介绍如何在 Java 语言中使用 JSON. 类库选择 Java中并没有内置JSON的解析,因此使用JSON需要借助第三方类库. 下面是几个常用的 JSON 解析 ...

  7. java中json数据_java中的JSON对象的使用

    申明:没工作之前都没听过JSON,可能是自己太菜了.可能在前台AJAX接触到JSON,这几天要求在纯java的编程中,返回JSON字符串形式. 网上有两种解析JSON对象的jar包:JSON-lib. ...

  8. java request get json数据_Java中,获取request中json数据

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 import java.io.IOException; import javax.servlet.http.HttpServletRequest; /** ...

  9. java json 工具类_Java中JSON处理工具类使用详解

    本文实例为大家分享了JSON处理工具类的具体代码,供大家参考,具体内容如下 import java.io.IOException; import java.util.Date; import java ...

  10. java json自定义_java返回json设置自定义的格式

    springMvc返回Json中自定义日期格式 (一)输出json数据 springmvc中使用jackson-mapper-asl即可进行json输出,在配置上有几点: 1.使用mvc:annota ...

最新文章

  1. Echart遇到的问题:tooltip提示框大小异常
  2. python模拟给qq发消息,python模拟QQ聊天--socket通信
  3. HDMIARC是什么
  4. 【深度优先搜索】整数的划分
  5. php命令行是什么,什么是命令行?
  6. 一道头条面试题,小夕差点没读懂题目,找出数组中缺失的数字,最近击败100%的用户!...
  7. python:画图调整图例位置
  8. 中了计算机病毒改怎么办,计算机中病毒了怎么办?清除计算机病毒方法有哪些...
  9. 013_itop4412设置多个GPIO
  10. 删除的win10应用商店怎么恢复
  11. 为什么一提到苹果就想到乔布斯,蒂姆·库克的事迹你知道多少?
  12. spj查询零件、工程、供应商表
  13. flutter在IOS上的登录实现——QQ登录、微信登录、自动识别手机号一键登录、apple登录
  14. 计算机文档里的圆圈,电脑怎么打出圆圈符号?利用word或者输入法打出圆圈的方法介绍...
  15. 二叉树的非递归遍历和递归遍历
  16. mysql 简述pk uk fk 的区别和对数据库性能的影响_SQL Server 数据库中PK,UK, DF, CK, FK是什么意思?...
  17. 机关值班php代码,机关事业单位值班制度
  18. Python全栈工程师(30:html)
  19. 更新Pycharm中的pip版本及第三方包的安装问题
  20. Mac OS X 键盘快捷键 --- 很全面

热门文章

  1. vijos 1540 月亮之眼 并查集
  2. DeleteRow()
  3. Accumulator Proof解析
  4. effect和watch 的区别详解
  5. JVM3-类文件结构
  6. 武大三行情书第一名---《螃蟹在剥我的壳》
  7. Excel 2010 编辑公式
  8. 营销/网赚/seo/淘宝资料收集下载
  9. 14期 《心有猛虎 细嗅蔷薇》5月刊
  10. 数据分析——实习僧数据分析岗招聘信息分析