目录

1.创建json对象

1.1 创建JSONObject对象

使用map初始化json

@Test

public void test1()

{

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 = new JSONObject(map);

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

Map map2 = json1.toMap();

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

}

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

使用javabean初始化json

//javaBean

class Person {

public String name;

public int age;

public String idCard;

//省略getter&setter

}

//使用javaBean初始化json

@Test

public void test2()

{

Person person = new Person();

person.setName("孙亚龙");

person.setAge(30);

person.setIdCard("512445546565164641212");

JSONObject json2 = new JSONObject(person);

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

}

直接创建JSONObject

@Test

public void test3()

{

JSONObject json3 = new JSONObject();

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对象,字符串最外层必须为中括号包裹:

@Test

public void test12()

{

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

JSONArray jsonArray = new JSONArray(jsonString);

for (Object object : jsonArray) {

System.out.println(object);

}

}

直接创建JSONArray对象:

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

@Test

public void test_1()

{

JSONArray jsonArray = new JSONArray();

//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包:

import org.json.JSONArray;

import org.json.JSONObject;

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

@Test

public void test6()

{

//待解析的json字符串

String jsonString = "{'name':'卢本伟','age':24,'Position':'Mid'}";

//因为json字符串是大括号包围,所以用JSONObject解析

JSONObject json = new JSONObject(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);

}

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

@Test

public void test7()

{

//待解析的json字符串

String jsonString = "['卢本伟','white','卢伟','五五开']";

//因为json字符串是大括号包围,所以用JSONArray解析

JSONArray jsonArray = new JSONArray(jsonString);

//遍历即可,foreach或for循环

for (Object name : jsonArray) {

System.out.println(name);

}

}

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

@Test

public void test5()

{

//待解析的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 = new JSONObject(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对象来处理:

@Test

public void test3()

{

//简单对象类型

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对象来处理:

@Test

public void test4()

{

//数组类型

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

JSONArray json = JSON.parseArray(jsonStr);

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

System.out.println(first);

System.out.println(json);

}

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

@Test

public void test5()

{

//混合类型

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 import java.util.Arrays;

7 import java.util.HashMap;

8

9 public class Player {

10 private String name;

11 private int age;

12 private HashMap Hero = new HashMap();

13 private String[] nickNames;

14 private Honor[] Honors;

15

16 public String getName() {

17 return name;

18 }

19

20 public void setName(String name) {

21 this.name = name;

22 }

23

24 public int getAge() {

25 return age;

26 }

27

28 public void setAge(int age) {

29 this.age = age;

30 }

31

32 public HashMap getHero() {

33 return Hero;

34 }

35

36 public void setHero(HashMap hero) {

37 Hero = hero;

38 }

39

40 public String[] getNickNames() {

41 return nickNames;

42 }

43

44 public void setNickNames(String[] nickNames) {

45 this.nickNames = nickNames;

46 }

47

48 public Honor[] getHonors() {

49 return Honors;

50 }

51

52 public void setHonors(Honor[] honors) {

53 Honors = honors;

54 }

55

56

57 @Override

58 public String toString() {

59 return "Player [name=" + name + ", age=" + age + ", Hero=" + Hero + ", nickNames=" + Arrays.toString(nickNames)

60 + ", Honors=" + Arrays.toString(Honors) + "]";

61 }

62

63

64 static class Honor

65 {

66 int year;

67 String name;

68 public int getYear() {

69 return year;

70 }

71 public void setYear(int year) {

72 this.year = year;

73 }

74 public String getName() {

75 return name;

76 }

77 public void setName(String name) {

78 this.name = name;

79 }

80 @Override

81 public String toString() {

82 return "Honor [year=" + year + ", name=" + name + "]";

83 }

84 }

85

86

87 }

@Test

public void Json2Obj()

{

//待解析的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解析

解析普通属性

@Test

public void getCustomProp()

{

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

try

{

ObjectMapper objMap = new ObjectMapper();

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的代码

@Test

public void json2obj()

{

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

try

{

ObjectMapper objMapper = new ObjectMapper();

//当反序列化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

*/

@Test

public void jackSonTest()

{

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

try

{

ObjectMapper mapper = new ObjectMapper();

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封装json串示例 Welcome to the Java JSON Example Tutorial. JSON (JavaScript Object Notation) is text-b ...

  2. java json特殊字符处理_java json字符串传递给 js 时 特殊字符转义错误 研究

    一些换行 回车等符号需要转义 主要注意 单引号 与双引号. 一 如果js以 双引号接收字符串 则转单引号 "  至 \" 否则js报错 二 如果js以 单引号接收字符串 则转单引号 ...

  3. java实现顺序栈_Java实现顺序栈原理解析

    这篇文章主要介绍了java实现顺序栈原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 什么是栈 1.栈的英文是stack 2.栈是一个先入后出 ...

  4. java表格源码_Java表格JTable代码实例解析

    代码如下: import javax.swing.JTable; import javax.swing.table.AbstractTableModel; import javax.swing.JSc ...

  5. java上机实验答案_java上机实验答案与解析

    java上机实验答案与解析 JAVA上机实验题答案与解析 实验一 Java程序编程 1. 编写一个Java应用程序,输出内容为Hello!. 注:文件位置位于e:\2:\Hello.java 编译:( ...

  6. Java应用案例分析_Java应用启动参数实例解析

    当我们自己跑一个小程序时,可以用类似java app.jar的命令直接跑.而在实际的生产/开发环境,除了classpath外,还会加上一大堆JVM运行参数. 下面,就对一个实例进行分析: -Xms14 ...

  7. java设置语言编码_Java多语言编码问题解析

    1.Java编译器在对源文件编译前,会先把源文件转换为unicode编码,因为这个原因,我们在编译时一定要把源文件用的是什么编码方式正确无误的"告诉"编译器. 例如:我们的源文件是 ...

  8. java sql语句逗号_Java 实现对Sql语句解析

    最近要实现一个简易的数据库系统,除了要考虑如何高效的存储和访问数据,建立表关系外,对基本的sql查询语句要做一个解析,这样我们才能知道用户的查询要求:因为时间关系,参考了已有的一篇文章,并对其实现中出 ...

  9. java compareto源码_java中compareTo源码解析(String类型)

    官网API(JDK13): 先上结论: 1.计算compareTo两边字符串的总长度(length()) 2.求出总长度中的最小值 3.如果长度相等,比较ASCII值相同,返回0 4.如果长度不相同, ...

  10. json java 实例_java JSON数据转对象

    只要电脑配置了JDK, 便可使用Json2Bean, 不用导入到eclipse或android studio, 直接双击就可以打开使用, 每次使用之前要重新设置编辑规则,不用改动什么规则,点" ...

最新文章

  1. 2000+引用的fastp推出重磅更新,再提速一倍!
  2. 5300亿参数的「威震天-图灵」,微软、英伟达合力造出超大语言模型
  3. 面向对象课程第二单元作业总结
  4. Mac 打开、编辑 .bash_profile 文件
  5. Redis进阶-如何从海量的 key 中找出特定的key列表 Scan详解
  6. 多线程小抄集(新编四)
  7. 如何解决在使用ElementUI时发现有些控件是英文的
  8. 【Python】shuffle函数
  9. html语言的网页制作,HTML语言的网页制作技巧与方法
  10. CLR via C# 3rd - 07 - Constants and Fields
  11. 22.实例 --- nginx 虚拟主机
  12. 《CSS世界》:一本CSS领域的内功心法修炼手册
  13. 今天再发一下热门关键字,看看能否推广网站
  14. NFC - PN532复制RFID门禁卡
  15. jmeter监听器---jp@gc - PerfMon Metrics Collector
  16. Imperva incapsula逆向分析
  17. html中banner属性,banner是什么
  18. 基于jsp的校园二手物品交易网站
  19. javascript实现的淘宝五星评价(版本2)
  20. UiPath sap logon

热门文章

  1. InfoPath 2007 --来自microsoft.com
  2. 计算机网络的雏形为,计算机网络的发展雏形是什么
  3. excel单元格斜线_个人永久性免费-Excel催化剂功能第74波-批量排版格式利器,瞬间美化表格...
  4. 慕课网-哒哒租车系统
  5. wtl单文档选项_WTL体系结构
  6. transforms常用函数简介
  7. supersu_如何使用SuperSU和TWRP扎根Android手机
  8. 关于我用iVX沉浸式体验了一把0代码创建电影院购票小程序这件事
  9. VC++、MFC中最好的开源项目
  10. 孙式太极拳的站桩(作者:孙剑云)