json-smart 使用示例(推荐fastjson)
2013-08-08 10:44 zhenjing 阅读(23143) 评论(6) 编辑 收藏 举报关于json库,请使用fastjson,这是我用过的最好用的json库!
地址:https://github.com/alibaba/fastjson
=======================================================
json是一种通用的数据格式。相比与protocal buffer、thrift等数据格式,json具有可读性强(文本)、天生具备良好的扩展性(随意增减字段)等优良特点,利用json作为通讯协议,开发效率更高。当然相较于二进制协议,文本更耗带宽。
json和HTTP协议都是基于文本的,天生的一对。面对多终端的未来,使用Json和HTTP作为前端架构的基础将成为开发趋势。
简介
json-smart官方主页:https://code.google.com/p/json-smart/
特性:https://code.google.com/p/json-smart/wiki/FeaturesTests
性能评测:https://code.google.com/p/json-smart/wiki/Benchmark
Json-smart-API: http://www.jarvana.com/jarvana/view/net/minidev/json-smart/1.0.9/json-smart-1.0.9-javadoc.jar!/net/minidev/json/package-summary.html
使用示例
import net.minidev.json.JSONObject; import net.minidev.json.JSONValue; import net.minidev.json.JSONArray; import net.minidev.json.JSONStyle; import net.minidev.json.parser.ParseException; import java.io.UnsupportedEncodingException; import java.util.*; /* * Home page: http://code.google.com/p/json-smart/ * * compiler: javac -cp json-smart-1.1.1.jar JsonSmartTest.java * * Run: java -cp ./:json-smart-1.1.1.jar JsonSmartTest * */ public class JsonSmartTest { //1. String <==> JsonObject public static void DecodingTest() throws ParseException { System.out.println("=======decode======="); String s="[0,{'1':{'2':{'3':{'4':[5,{'6':7}]}}}}]"; Object obj=JSONValue.parse(s); JSONArray array=(JSONArray)obj; System.out.println("======the 2nd element of array======"); System.out.println(array.get(1)); System.out.println(); JSONObject obj2=(JSONObject)array.get(1); System.out.println("======field \"1\"=========="); System.out.println(obj2.get("1")); s="{}"; obj=JSONValue.parse(s); System.out.println(obj); s="{\"key\":\"Value\"}"; // JSONValue.parseStrict() // can be use to be sure that the input is wellformed obj=JSONValue.parseStrict(s); JSONObject obj3=(JSONObject)obj; System.out.println("====== Object content ======"); System.out.println(obj3.get("key")); System.out.println(); } public static void EncodingTest() { System.out.println("=======EncodingTest======="); // Json Object is an HashMap<String, Object> extends JSONObject obj = new JSONObject(); obj.put("name", "foo"); obj.put("num", 100); obj.put("balance", 1000.21); obj.put("is_vip", true); obj.put("nickname",null); System.out.println("Standard RFC4627 JSON"); System.out.println(obj.toJSONString()); System.out.println("Compacted JSON Value"); System.out.println(obj.toJSONString(JSONStyle.MAX_COMPRESS)); // if obj is an common map you can use: System.out.println("Standard RFC4627 JSON"); System.out.println(JSONValue.toJSONString(obj)); System.out.println("Compacted JSON Value"); System.out.println(JSONValue.toJSONString(obj, JSONStyle.MAX_COMPRESS)); } public static void EncodingTest2() { System.out.println("=======EncodingTest2======="); // Json Object is an HashMap<String, Object> extends JSONObject obj = new JSONObject(); obj.put("name", "foo"); obj.put("num", 100); obj.put("balance", 1000.21); obj.put("is_vip", true); obj.put("nickname",null); //Output Compressed json Object value = obj; String com_json = JSONValue.toJSONString(value, JSONStyle.MAX_COMPRESS); String json = JSONValue.toJSONString(value, JSONStyle.NO_COMPRESS); System.out.println("Compacted JSON Value"); System.out.println(com_json); System.out.println("From RFC4627 JSON String: " + JSONValue.compress(json)); System.out.println("From Compacted JSON String: " + JSONValue.compress(com_json)); System.out.println("Standard RFC4627 JSON Value"); System.out.println(json); System.out.println("From RFC4627 JSON String: " + JSONValue.uncompress(json)); System.out.println("From Compacted JSON String: " + JSONValue.uncompress(com_json)); //from compress json string System.out.println("From compress json string(JSONObject)"); Object obj2=JSONValue.parse(com_json); System.out.println(JSONValue.toJSONString(obj2, JSONStyle.NO_COMPRESS)); System.out.println(JSONValue.toJSONString(obj2, JSONStyle.MAX_COMPRESS)); } //2. Java Struct <==> JsonSmart object public class Person { String name; int age; boolean single; long mobile; public String getName(){ return this.name; } public void setName(String name) { this.name = name; } public int getAge() { return this.age; } public void setAge(int age) { this.age = age; } public boolean getSingle() { return this.single; } public void setSingle(boolean single) { this.single = single; } public long getMobile() { return mobile; } public void setMobile(long mobile) { this.mobile = mobile; } } public class JSONDomain { // for convert struct <==> json public Object result = new JSONObject(); public Object getResult() { return result; } public void setResult(Object result) { this.result = result; } } public void Struct2JsonObject() { System.out.println("========Struct2JsonObject======="); Person person = new Person(); person.setName("json smart"); person.setAge(13); person.setMobile(20130808); Person person2 = new Person(); person2.setName("test"); person2.setAge(123); person2.setMobile(888666); List<Person> array = new ArrayList<Person>(); array.add(person); array.add(person2); //1. struct <==> JsonObject JSONObject obj = new JSONObject(); //obj = (Object)person; // compiler error! // way 1: JSONDomain data = new JSONDomain(); // for convert data.setResult(person); // obj = (JSONObject)data.getResult(); // run error: ClassCastException obj.put("person", data.getResult()); System.out.println(JSONValue.toJSONString(obj)); // way 2: obj.put("person", array.get(1)); System.out.println(JSONValue.toJSONString(obj)); //2. Container <==> JsonObject JSONArray jsonArray = new JSONArray(); jsonArray.add(person); jsonArray.add(person2); JSONObject result = new JSONObject(); result.put("persons", jsonArray); System.out.println(JSONValue.toJSONString(result)); } //3. JsonSmartSerializationTest public static Map<String, Object> testBytes2Map(byte[] bytes) { Map<String, Object> map = null; try { map = (Map<String, Object>) JSONValue.parseStrict((new String(bytes, "UTF-8"))); } catch (ParseException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return map; } // JsonSmartSerializationTest public static byte[] testMap2Bytes(Map<String, Object> map) { String str = JSONObject.toJSONString(map); byte[] result = null; try { result = str.getBytes("UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return result; } public static void main(String[] args) throws Exception { DecodingTest(); EncodingTest(); EncodingTest2(); JsonSmartTest test = new JsonSmartTest(); test.Struct2JsonObject(); } }
解析文件示例
import net.minidev.json.JSONObject; import net.minidev.json.JSONValue; import net.minidev.json.JSONArray; import net.minidev.json.JSONStyle; import net.minidev.json.parser.ParseException; import java.io.UnsupportedEncodingException; import java.util.*; import java.lang.StringBuffer; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.FileInputStream; import java.io.InputStream; import java.io.OutputStream; import java.io.IOException; /* * Home page: http://code.google.com/p/json-smart/ * * compiler: javac -cp json-smart-1.1.1.jar JsonTool.java * * Run: java -cp ./:json-smart-1.1.1.jar JsonTool * */ public class JsonTool { //1. String <==> JsonObject public static void ParseData(String data) throws ParseException { System.out.println("=======decode======="); // s="{\"key\":\"Value\"}"; Object obj = JSONValue.parseStrict(data); JSONObject obj3 = (JSONObject)obj; System.out.println(obj3.get("data")); System.out.println(); } public static void EncodingTest() { System.out.println("=======EncodingTest======="); // Json Object is an HashMap<String, Object> extends JSONObject obj = new JSONObject(); obj.put("name", "foo"); obj.put("num", 100); obj.put("balance", 1000.21); obj.put("is_vip", true); obj.put("nickname",null); System.out.println("Standard RFC4627 JSON"); System.out.println(obj.toJSONString()); System.out.println("Compacted JSON Value"); System.out.println(obj.toJSONString(JSONStyle.MAX_COMPRESS)); // if obj is an common map you can use: System.out.println("Standard RFC4627 JSON"); System.out.println(JSONValue.toJSONString(obj)); System.out.println("Compacted JSON Value"); System.out.println(JSONValue.toJSONString(obj, JSONStyle.MAX_COMPRESS)); } public static void main(String[] args) throws Exception { if( args.length < 1) { System.out.println("Usage: JsonTool file"); System.exit(-1); } String file = args[0]; System.out.println(file); StringBuffer strBuffer = new StringBuffer(); InputStreamReader inputReader = null; BufferedReader bufferReader = null; OutputStream outputStream = null; try { InputStream inputStream = new FileInputStream(file); inputReader = new InputStreamReader(inputStream); bufferReader = new BufferedReader(inputReader); // 读取一行 String line = null; while ((line = bufferReader.readLine()) != null) { strBuffer.append(line); } } catch (IOException e) { System.out.println(e.getMessage()); } finally { // OtherUtilAPI.closeAll(outputStream, bufferReader, inputReader); } //System.out.println(strBuffer.toString()); //System.out.println("\n"); ParseData(strBuffer.toString()); } }
参考
作者:zhenjing.chen
出处:http://www.cnblogs.com/zhenjing/
未注明转载的文章,版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。