您的位置:首页 > 编程语言 > Java开发

java生成Json工具之JsonSimple的使用

2016-11-29 00:00 253 查看
json-simple是由是Google开发的JavaJSON解析框架,基于Apache协议。目前版本为1.1

项目主页:https://code.google.com/p/json-simple/#JSON.simple_in_Publications

Java实体类和JSON对象之间的映射如下表:

JSONJava
stringjava.lang.String
numberjava.lang.Number
true|falsejava.lang.Boolean
nullnull
arrayjava.util.List
objectjava.util.Map
从此表中我们可以看出,当解析json对象映射到java实体类时,是从左边到右边。从左边到右边是Java实体类到json字符。在编码时默认的JSONArray是继承了ArrayList实现了List接口,JSONObject是继承了HashMap实现了Map接口。jsonsimple默认的只支持表中的几种类型转换为json如果是一个复杂的对象要转换成Json字符,该类要实现JSONAware接口或者是JSONStreamAware。实现了以上两个接口后必须要重写toJSONString()或者writeJSONString()。来输出json字符。

好了,话不多说,看例子吧!

Example1-1-EncodeaJSONobject

//是java中HashMap的子类
JSONObjectjson=newJSONObject();json.put("name","张晓天");json.put("boolean",true);json.put("null",null);json.put("num",7);json.put("double",34.5);printJson(json.toJSONString());//{"num":7,"name":"张晓天","boolean":true,"double":34.5,"null":null}


Example1-2-EncodeaJSONobject–Streaming

JSONObjectobj=newJSONObject();obj.put("name","foo");obj.put("num",newInteger(100));obj.put("balance",newDouble(1000.21));obj.put("is_vip",newBoolean(true));obj.put("nickname",null);StringWriterout=newStringWriter();try{obj.writeJSONString(out);}catch(IOExceptione){//TODOAuto-generatedcatchblock
e.printStackTrace();}StringjsonText=out.toString();printJson(jsonText);//{"balance":1000.21,"num":100,"nickname":null,"is_vip":true,"name":"foo"}


Example2-1-EncodeaJSONarray

JSONArraylist=newJSONArray();list.add("foot");list.add("张晓天");list.add(false);list.add(6.9);list.add(7);list.add(null);printJson(list.toJSONString());//["foot","张晓天",false,6.9,7,null]


Example2-2-EncodeaJSONarray-UsingList

Listlist=newLinkedList<>();list.add("foot");list.add("张晓天");list.add(false);list.add(6.9);list.add(7);list.add(null);StringjsonText=JSONValue.toJSONString(list);printJson(jsonText);//["foot","张晓天",false,6.9,7,null]


Example2-3-EncodeaJSONarray-UsingListandstreaming

LinkedListlist=newLinkedList();list.add("张晓天");list.add(100);list.add(1000.21);list.add(true);list.add(null);StringWriterout=newStringWriter();try{JSONValue.writeJSONString(list,out);}catch(IOExceptione){//TODOAuto-generatedcatchblock
e.printStackTrace();}StringjsonText=out.toString();printJson(jsonText);//["张晓天",100,1000.21,true,null]


Example3-MergetwoJSONobjects

JSONObjectjson1=newJSONObject();json1.put("name","json1");json1.put("age",3);json1.put("balance",3.8);JSONObjectjson2=newJSONObject();json2.put("is_vip","是");json2.put("nickname",null);json2.put("num",8.9);json2.putAll(json1);//注意两个对象的key不能一样,否则会替换
printJson(json2.toJSONString());//{"balance":3.8,"num":8.9,"nickname":null,"is_vip":"是","name":"json1","age":3}


Example4-MergetwoJSONarrays

JSONArraylist1=newJSONArray();list1.add("foo");list1.add(newInteger(100));list1.add(newDouble(1000.21));JSONArraylist2=newJSONArray();list2.add(newBoolean(true));list2.add(null);JSONObjectobj=newJSONObject();obj.put("name","foo");obj.put("num",newInteger(100));obj.put("balance",newDouble(1000.21));obj.put("is_vip",newBoolean(true));obj.put("nickname",null);obj.put("list1",list1);obj.put("list2",list2);printJson(obj.toJSONString());//{"balance":1000.21,"list2":[true,null],"num":100,"list1":["foo",100,1000.21],"nickname":null,"is_vip":true,"name":"foo"}


Example5-1-CombinationofJSONprimitives,MapandList

Mapm1=newLinkedHashMap();Mapm2=newHashMap();Listl1=newLinkedList();m1.put("one","第一值");m1.put("two","第二个值");m2.put("k1","m2-k1");m2.put("k2","m2-k2");l1.add(m1);l1.add(m2);Stringjson=JSONValue.toJSONString(l1);printJson(json);//[{"one":"第一值","two":"第二个值"},{"k1":"m2-k1","k2":"m2-k2"}]


Example5-2-CombinationofJSONprimitives,JSONObject,MapandList,andstreaming

StringWriterout=newStringWriter();JSONObjectobj=newJSONObject();LinkedHashMapm1=newLinkedHashMap();LinkedListl1=newLinkedList();obj.put("k1","v1");obj.put("k2",m1);obj.put("k3",l1);m1.put("mk1","mv1");l1.add("lv1");l1.add("lv2");m1.put("mk2",l1);try{obj.writeJSONString(out);}catch(IOExceptione){//TODOAuto-generatedcatchblock
e.printStackTrace();}System.out.println("jsonString:");System.out.println(out.toString());StringjsonString=obj.toJSONString();System.out.println(jsonString);


Example6-CustomizeJSONoutputs

JSONArrayusers=newJSONArray();users.add(newUser(123,"zxd","zxd"));users.add(newUser(124,"ksks","ksk"));users.add(newUser(125,"\"foo2\"","secret2"));printJson(users.toJSONString());//[{userName:"zxd",ID:123},{userName:"ksks",ID:124},{userName:"\"foo2\"",ID:125}]


JSONArrayusers=newJSONArray();users.add(newUser(123,"foo1","secret1"));users.add(newUser(124,"foo2","secret2"));users.add(newUser(125,"\"foo2\"","secret2"));StringWriterout=newStringWriter();try{users.writeJSONString(out);}catch(IOExceptione){//TODOAuto-generatedcatchblock
e.printStackTrace();}printJson(out.toString());//[{userName:"foo1",ID:123},{userName:"foo2",ID:124},{userName:"\"foo2\"",ID:125}]




classUserimplementsJSONAware{privateintid;privateStringname;privateStringpassword;publicUser(intid,Stringname,Stringpassword){this.id=id;this.name=name;this.password=password;}publicStringtoJSONString(){StringBuffersb=newStringBuffer();sb.append("{");sb.append(JSONObject.escape("userName"));sb.append(":");sb.append("\""+JSONObject.escape(name)+"\"");sb.append(",");sb.append(JSONObject.escape("ID"));sb.append(":");sb.append(id);sb.append("}");//也可以这样写
/**JSONObjectobj=newJSONObject();obj.put("userName",name);*obj.put("ID",newInteger(id));returnobj.toString();*/
returnsb.toString();}publicvoidwriteJSONString(Writerout)throwsIOException{LinkedHashMapobj=newLinkedHashMap();obj.put("userName",name);obj.put("ID",newInteger(id));JSONValue.writeJSONString(obj,out);}}




如果你使用了maven来创建项目也可在pom中添加以下依赖:

<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1.1</version>

</dependency>


总结:jsonsimple对于简单转换成json对象,但是对于比较复杂的对象就不太好了,复杂的对象都要实现JSONAware重写对应的方法,才能实现指定格式的输出。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: