java中json的使⽤和解析1.创建json对象
1.1创建JSONObject对象
使⽤map初始化json
@Test
public void test1()
{
Map<String, Object> map = new LinkedHashMap<String, Object>();
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.String());
Map map2 = Map();
System.out.String());
}
可以看到,当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.String());
}
直接创建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.String());
}
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包,并导⼊
  下载地址(maven仓库):
  导⼊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 = String("name");
int age = Int("age");
String position = String("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,'na        try {
/
/因为json字符串是⼤括号包围,所以⽤JSONObject解析
JSONObject json = new JSONObject(jsonString);
/*
* 普通元素,根据类型直接获取
*/
String name = String("name");
int age = Int("age");
System.out.println("姓名:"+name);
System.out.println("年龄:"+age);
System.out.println("————————————————————————————————");
/*
* 属性⼤括号包括,先获取JSONObject对象
*/
JSONObject hero = JSONObject("Hero");
String hero_name = String("name");
String hero_position = String("Position");
String hero_charactor = String("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 = JSONArray("nickNames");
for (Object nickName : nickNames) {
System.out.println(nickName);
}
System.out.println("————————————————————————————————");
/*
* 属性中既有中括号包括,⼜嵌套了⼤括号,⼀层层获取即可
*/
JSONArray Honors = JSONArray("Honors");
System.out.println("所获荣誉:");
for(int i=0;i<Honors.length();i++)
{
fastjson字符串转数组
JSONObject honor = JSONObject(i);
int honor_year = Int("year");
String honor_name = String("name");
System.out.println(honor_year+" : "+ honor_name);
}
}catch(Exception e)
{
System.out.Message());
}
}
2.2fastjson解析
fastjson是阿⾥巴巴开源产品之⼀,解析速度快。
下载地址(maven仓库):
JSON字符串是简单对象类型,被⼤括号包围:
当待解析的JSON字符串是简单对象类型的,即⽤⼤括号包围,此时采⽤JSONObject对象来处理:    @Test
public void test3()
{
//简单对象类型
String jsonStr = "{'name':'Misaya','position':'Mid','hero':':Twisted Fate'}";
JSONObject json = JSON.parseObject(jsonStr);
String name = String("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) (0);
System.out.println(first);
System.out.println(json);
}
JSON字符串为混合类型,既有简单对象,⼜有数组,逐层解析
public void test5()
{
//混合类型
String jsonStr = "[{'name':'元旦','vacation':'3'},{'name':'五⼀','vacation':'7'},{'name':'国庆','vacation':'7'}]";
JSONArray jsonArr = JSON.parseArray(jsonStr);
JSONObject jsonObj1 = JSONObject(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<String,String>();
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=" + String(nickNames)
60                + ", Honors=" + String(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            ar = 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 }
View Code
@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,'na

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。