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 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;67String 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 }

@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);

}

解析普通属性

@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,首先需要json-lib-2.4-jdk15.jar,但是如果只有这一个jar包还不行,它需要依赖以下几个包: commons-beanutils.jar commons-co ...

  2. c#解析json字符串数组_C#解析JSON字符串总结

    JSON文件读取到内存中就是字符串,.NET操作JSON就是生成与解析JSON字符串. 操作JSON通常有以下几种方式: 1. 原始方式:按照JSON字符串自己来解析. 2. 通用方式[★★★★★]: ...

  3. java字符串数组转json_java中字符串String格式转化成json格式

    java字符串数组转json_java中字符串String格式转化成json格式 String s= Connection.deleteHost("10310");System.o ...

  4. java中的json_java中的json使用

    josn: 一种数据传输格式,与开发语言无关,轻量级 一开始是javaScript的,但是后面比较流传,几乎所有语言都有相应的使用API 数据结构: Object---对象 使用花括号{}包含的键值对 ...

  5. java 格式化json_JAVA 格式化JSON数据并保存到json文件中的实例

    使用fastjson格式化json数据并保存到文件 /** * 将JSON数据格式化并保存到文件中 * @param jsonData 需要输出的json数 * @param filePath 输出的 ...

  6. java中的json_Java中Json格式总结

    Java中Json格式总结 JSON(JavaScript Object Notation) 是一种轻量级的基于文本的数据交换格式.它采用完全独立于语言的文本格式,易于读写同时也易于机器解析和生成(网 ...

  7. java json相加_JAVA,当某个json数据中一个字段与另一个json数据中的字段值相同时,对两个json进行合并且相加,...

    展开全部 要判断json数据的字段62616964757a686964616fe78988e69d8331333365636634与其他数据是否相同,那么肯定是要先解析json数据.解析json数据的 ...

  8. java中map转为json数据_Java技术-将java中Map类型数据转化为json数据并以Ajax形式返回...

    Java技术-将java中Map类型数据转化为json数据并以Ajax形式返回html 1.自定义工具类(简单易用)-下面是我写的一个简单的工具类前端 package com.test.util; i ...

  9. java对象和字符串转换_java中字符串和JSON对象、Bean之间的相互转换

    JSON格式用于数据传输.bean用于封装数据信息.String用于展示封装信息.json格式的内容用json工具或者之间在json.cn展示比较清晰. 一.将Sting转为Json 在开发中,经常是 ...

  10. jsp java json解析,jsp中获取json字符串,并解析

    JqueryDemo1 function showData() { var str='{ "name": "John" }';//json标准格式 var ob ...

最新文章

  1. luoguP3387 【模板】缩点
  2. LRU(Least Recently Used)算法的理解
  3. leetcode算法题--回文链表
  4. [转帖]Runtime, Engine, VM 的区别是什么?
  5. Python---常见问题
  6. LWIP裸机环境下实现TCP与UDP通讯
  7. OpenGL equirectangular等矩形环境图的实例
  8. Hadoop开启Kerberos安全模式
  9. 趣谈Linux操作系统01:概述
  10. Django实战(10):单元测试
  11. 【CFD学习】yplus,y+,边界层理论,壁面第一层网格
  12. 原来TOGAF标准第10版是个活力生态圈
  13. wav格式怎么转换成mp3?
  14. 摄氏温度和华氏温度相互转换(及其概念)
  15. MATLAB的MCC命令
  16. 程序员之路:Gmail邮箱客户端配置_彭世瑜_新浪博客
  17. 微信公众号注册免费教程
  18. #ps –ef_ps命令 – 显示进程状态
  19. 输出字符串中匹配最多的括号数
  20. html和js画圣诞树图片,教你如何把JavaScript代码写成圣诞树

热门文章

  1. 国标28181:实时视频播放
  2. 【Codecs系列】视频编码中的率失真优化RDO技术
  3. 一图看懂80年“AI革命”简史
  4. Mariadb 设置远程访问
  5. 创建动态的XML数据
  6. LeetCode 1296. 划分数组为连续数字的集合
  7. RIFT Multi-Modal Image Matching Based on Radiation-Variation Insensitive Feature Transform
  8. 微信小程序获取用户收货地址
  9. K8s中Secrets
  10. 【WinHex篇】WinHex制作特定区域镜像教程