json-lib包(最关键的两个类分别是jsonobject和jsonarray)完成对json的构造和一些基本方法的使用。
二者区别:
①jsonobject构造的字符串是键值对形式(key:value),多个键值对间以英文逗号连接;
②jsonarray构造的字符串是数组形式([array1,array2,...])。
需要使用的包下载链接:
一、jsonobject的使用。
(1)json字符串的两种构造方法:
①使用java对象;②使用map集合。
步骤一:首先新建java工程,导入依赖包;
步骤二:建立两个测试类:
teacher.java
package com.snnu.json;import java.util.list;public class teacher {private string name;private string sex;private int age;private list<transport> mytool;
public teacher(){
} public teacher(string name,string sex,int age,list<transport> mytool){this.name = name;this.sex = sex;this.age = age;this.mytool = mytool;
}public string getname() {return name;
}public void setname(string name) {this.name = name;
}public string getsex() {return sex;
}public void setsex(string sex) {this.sex = sex;
}public int getage() {return age;
}public void setage(int age) {this.age = age;
}public list<transport> getmytool() {return mytool;
}public void setmytool(list<transport> mytool) {this.mytool = mytool;
}
}
transport.java
package com.snnu.json;public class transport { private string name;private float price; public transport(){
} public transport(string name,float price){this.name = name;this.price = price;
}
public string getname() {return name;
}public void setname(string name) {this.name = name;
}public float getprice() {return price;
}public void setprice(float price) {this.price = price;
}
}
步骤三:写main方法
方式一:
package com.snnu.json;import java.util.arraylist;import java.util.list;import net.sf.json.jsonobject;public class demo_creajsonfromobject {// 利用java对象生成json字符串public jsonobject createjsonfromobject(object object) {return jsonobject.fromobject(object);
}public static void main(string[] args) {// todo auto-generated method stubdemo_creajsonfromobject demo = new demo_creajsonfromobject();
teacher t = new teacher();
t.setname(张三);
t.setsex(男);
t.setage(21);
transport bike = new transport(自行车, 267);
transport motorcycle = new transport(摩托车, 3267);
transport car = new transport(小汽车, 100000);
list<transport> tools = new arraylist<transport>();
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: 男
}
方式二:
package com.snnu.json;import java.util.hashmap;import java.util.map;import net.sf.json.jsonobject;public class demo_creajsonfrommap {//使用map集合生成json字符串public jsonobject createjsonfrommap(map<string,string> map){
jsonobject jsob=new jsonobject();
jsob.putall(map);return jsob;
}
public static void main(string[] args) {// todo auto-generated method stubdemo_creajsonfrommap demo=new demo_creajsonfrommap();
map<string,string> mmap=new hashmap<string,string>();
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的三个常用方法举例。
package com.snnu.json;import java.util.arraylist;import java.util.list;import net.sf.json.jsonobject;public class methodtest {//put方法:在一个json中插入一个节点,若该节点已存在,则该节点的值将会被替换public jsonobject testput(){
jsonobject jo1=new jsonobject();
jo1.put(a, 1);
jo1.put(b, 2);
jo1.put(c, 3);
transport bike=new transport(bike,200);
jo1.put(d, bike);
list<string> list=new arraylist<string>();
list.add(one);
list.add(two);
list.add(three);
jo1.put(e, list);
jo1.put(a, 100); return jo1;
}
//accumulate方法:可以在同一个key下累积值,若key对应的value有值,则以数组形式累积;否则相当于put方法public jsonobject testaccumulate(){
jsonobject jo2=new jsonobject();
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<string> list=new arraylist<string>();
list.add(one);
list.add(two);
list.add(three);
jo2.accumulate(c, list);
jo2.put(d, 4); return jo2;
}
//与put方法基本一致public jsonobject testelement(){
jsonobject jo3=new jsonobject();
jo3.put(a, 1);
jo3.put(b, 2);
jo3.put(c, 3);
jo3.element(c, 300);
return jo3;
}
public static void main(string[] args) {// todo auto-generated method stubmethodtest test=new methodtest();
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)基本使用:
package com.snnu.json;import net.sf.json.jsonarray;import net.sf.json.jsonobject;public class demo_jsonarray {
public jsonobject testjsonarray(){
jsonobject ob=new jsonobject();
jsonarray ja=new jsonarray();
ja.add(1);
ja.add(2);
ja.add(3);
ja.add(4);
ja.add(5);
ob.put(array, ja); return ob;
}
public static void main(string[] args) {// todo auto-generated method stubdemo_jsonarray djs=new demo_jsonarray();
system.out.println(jsonarray的使用:+djs.testjsonarray());
}
}
对输出后的字符串进行格式化:
{array: [1,2,3,4,5]
}
三、综合实例
package com.snnu.json;import net.sf.json.jsonarray;import net.sf.json.jsonobject;public class demo_testjson {
public jsonobject test(){
jsonobject jo=new jsonobject();
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)取对应的valuestring value=jo.getstring(extra);
system.out.println(value); //将字符串转化为jsonarrayjsonarray jsar=jsonarray.fromobject(value);
string str_2=string.valueof(jsar.get(1));
system.out.println(str_2); //将字符串转化为jsonobjectjsonobject jsob=jsonobject.fromobject(str_2);
system.out.println(名称:+jsob.getstring(name));
system.out.println(价钱:+jsob.getstring(price));
system.out.println(-------------------------------分界线-------------------------------------------); return jo;
}public static void main(string[] args) {// todo auto-generated method stubdemo_testjson dtj=new demo_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}]}
以上就是json-lib包对json的构造和方法的使用的详细内容。