java 构造json字符串_JSONObject和JSONArray解析和构造json字符串

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}]}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值