JSON-lib包(最关键的两个类分别是JSONObject和JSONArray)完成对json的构造和一些基本方法的使用。
二者区别:
①JSONObject构造的字符串是键值对形式(key:value),多个键值对间以英文逗号连接;
②JSONArray构造的字符串是数组形式([array1,array2,...])。
需要使用的包下载链接:http://pan.baidu.com/s/1o7MZ8X8
一、JSONObject的使用。
(1)JSON字符串的两种构造方法:
①使用Java对象;②使用Map集合。
步骤一:首先新建Java工程,导入依赖包;
步骤二:建立两个测试类:
Teacher.java
packagecom.snnu.json;importjava.util.List;public classTeacher {privateString name;privateString sex;private intage;private ListmyTool;publicTeacher(){
}public Teacher(String name,String sex,int age,ListmyTool){this.name =name;this.sex =sex;this.age =age;this.myTool =myTool;
}publicString getName() {returnname;
}public voidsetName(String name) {this.name =name;
}publicString getSex() {returnsex;
}public voidsetSex(String sex) {this.sex =sex;
}public intgetAge() {returnage;
}public void setAge(intage) {this.age =age;
}public ListgetMyTool() {returnmyTool;
}public void setMyTool(ListmyTool) {this.myTool =myTool;
}
}
Transport.java
packagecom.snnu.json;public classTransport {privateString name;private floatprice;publicTransport(){
}public Transport(String name,floatprice){this.name =name;this.price =price;
}publicString getName() {returnname;
}public voidsetName(String name) {this.name =name;
}public floatgetPrice() {returnprice;
}public void setPrice(floatprice) {this.price =price;
}
}
步骤三:写main方法
方式一:
packagecom.snnu.json;importjava.util.ArrayList;importjava.util.List;importnet.sf.json.JSONObject;public classDemo_creajsonFromObject {//利用java对象生成json字符串
publicJSONObject createJsonFromObject(Object object) {returnJSONObject.fromObject(object);
}public static voidmain(String[] args) {//TODO Auto-generated method stub
Demo_creajsonFromObject demo = newDemo_creajsonFromObject();
Teacher t= newTeacher();
t.setName("张三");
t.setSex("男");
t.setAge(21);
Transport bike= new Transport("自行车", 267);
Transport motorcycle= new Transport("摩托车", 3267);
Transport car= new Transport("小汽车", 100000);
List tools = new ArrayList();
tools.add(bike);
tools.add(motorcycle);
tools.add(car);
t.setMyTool(tools);
JSONObject ob=demo.createJsonFromObject(t);
System.out.println(ob);
}
}
生成的json字符串为:
{
"age": 21,
"myTool": [
{
"name": "自行车",
"price": 267
},
{
"name": "摩托车",
"price": 3267
},
{
"name": "小汽车",
"price": 100000
}
],
"name": "张三",
"sex": "男"
}
方式二:
packagecom.snnu.json;importjava.util.HashMap;importjava.util.Map;importnet.sf.json.JSONObject;public classDemo_creajsonFromMap {//使用map集合生成json字符串
public JSONObject createJsonFromMap(Mapmap){
JSONObject jsob=newJSONObject();
jsob.putAll(map);returnjsob;
}public static voidmain(String[] args) {//TODO Auto-generated method stub
Demo_creajsonFromMap demo=newDemo_creajsonFromMap();
Map mmap=new HashMap();
mmap.put("name", "张三");
mmap.put("sex", "男");
mmap.put("age", "21");
JSONObject ob=demo.createJsonFromMap(mmap);
System.out.println(ob);
}
}
生成的json字符串为:
{"sex": "男","name": "张三","age": "21"}
(2)JSONObject的三个常用方法举例。
packagecom.snnu.json;importjava.util.ArrayList;importjava.util.List;importnet.sf.json.JSONObject;public classMethodTest {//put方法:在一个json中插入一个节点,若该节点已存在,则该节点的值将会被替换
publicJSONObject testPut(){
JSONObject jo1=newJSONObject();
jo1.put("a", "1");
jo1.put("b", "2");
jo1.put("c", "3");
Transport bike=new Transport("bike",200);
jo1.put("d", bike);
List list=new ArrayList();
list.add("one");
list.add("two");
list.add("three");
jo1.put("e", list);
jo1.put("a", "100");returnjo1;
}//accumulate方法:可以在同一个key下累积值,若key对应的value有值,则以数组形式累积;否则相当于put方法
publicJSONObject testAccumulate(){
JSONObject jo2=newJSONObject();
jo2.put("a", "1");
jo2.put("b", "2");
jo2.put("c", "3");
jo2.accumulate("c", "300");
Transport bike=new Transport("bike",200);
jo2.accumulate("c", bike);
List list=new ArrayList();
list.add("one");
list.add("two");
list.add("three");
jo2.accumulate("c", list);
jo2.put("d", "4");returnjo2;
}//与put方法基本一致
publicJSONObject testElement(){
JSONObject jo3=newJSONObject();
jo3.put("a", "1");
jo3.put("b", "2");
jo3.put("c", "3");
jo3.element("c", "300");returnjo3;
}public static voidmain(String[] args) {//TODO Auto-generated method stub
MethodTest test=newMethodTest();
System.out.println("JSONObject的put方法使用"+test.testPut());
System.out.println("JSONObject的accumulate方法使用"+test.testAccumulate());
System.out.println("JSONObject的element方法使用"+test.testElement());
}
}
①put方法输出json字符串格式化结果为:
{"a": "100","b": "2","c": "3","d": {"name": "bike","price": 200},"e": ["one","two","three"]
}
②accumulate方法输出json字符串格式化结果为:
{"a": "1","b": "2","c": ["3","300",
{"name": "bike","price": 200},
["one","two","three"]
],"d": "4"}
③element方法输出json字符串格式化结果为:
{"a": "1","b": "2","c": "300"}
二、JSONArray的使用
(1)基本使用:
packagecom.snnu.json;importnet.sf.json.JSONArray;importnet.sf.json.JSONObject;public classdemo_JsonArray {publicJSONObject testJsonArray(){
JSONObject ob=newJSONObject();
JSONArray ja=newJSONArray();
ja.add("1");
ja.add("2");
ja.add("3");
ja.add("4");
ja.add("5");
ob.put("array", ja);returnob;
}public static voidmain(String[] args) {//TODO Auto-generated method stub
demo_JsonArray djs=newdemo_JsonArray();
System.out.println("JSONArray的使用:"+djs.testJsonArray());
}
}
对输出后的字符串进行格式化:
{"array": ["1","2","3","4","5"]
}
三、综合实例
packagecom.snnu.json;importnet.sf.json.JSONArray;importnet.sf.json.JSONObject;public classdemo_testJson {publicJSONObject test(){
JSONObject jo=newJSONObject();
jo.put("name", "张三");
jo.put("sex","f");
jo.put("age",21);
Transport bike=new Transport("bike",250);
jo.put("extra", bike);
Transport car=new Transport("car",10000);
jo.accumulate("extra", car);
Transport motor=new Transport("motor",3000);
jo.accumulate("extra", motor);
System.out.println(jo);//根据key值(为extra)取对应的value
String value=jo.getString("extra");
System.out.println(value);//将字符串转化为JSONArray
JSONArray jsar=JSONArray.fromObject(value);
String str_2=String.valueOf(jsar.get(1));
System.out.println(str_2);//将字符串转化为JSONObject
JSONObject jsob=JSONObject.fromObject(str_2);
System.out.println("名称:"+jsob.getString("name"));
System.out.println("价钱:"+jsob.getString("price"));
System.out.println("-------------------------------分界线-------------------------------------------");returnjo;
}public static voidmain(String[] args) {//TODO Auto-generated method stub
demo_testJson dtj=newdemo_testJson();
System.out.println("综合测试:"+dtj.test());
}
}
输出结果为:
{"name":"张三","sex":"f","age":21,"extra":[{"name":"bike","price":250},{"name":"car","price":10000},{"name":"motor","price":3000}]}
[{"name":"bike","price":250},{"name":"car","price":10000},{"name":"motor","price":3000}]
{"name":"car","price":10000}
名称:car
价钱:10000
-------------------------------分界线-------------------------------------------综合测试:{"name":"张三","sex":"f","age":21,"extra":[{"name":"bike","price":250},{"name":"car","price":10000},{"name":"motor","price":3000}]}