json-smart 使用示例

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

javadoc: https://github.com/u2waremanager/maven-repository/blob/master/net/minidev/json-smart/1.1.1/json-smart-1.1.1-javadoc.jar

使用示例

  1. import net.minidev.json.JSONObject;
  2. import net.minidev.json.JSONValue;
  3. import net.minidev.json.JSONArray;
  4. import net.minidev.json.JSONStyle;
  5. import net.minidev.json.parser.ParseException;
  6.  
  7. import java.io.UnsupportedEncodingException;
  8. import java.util.*;
  9.  
  10. /*
  11. * Home page: http://code.google.com/p/json-smart/
  12. *
  13. * compiler: javac -cp json-smart-1.1.1.jar JsonSmartTest.java
  14. *
  15. * Run: java -cp ./:json-smart-1.1.1.jar JsonSmartTest
  16. *
  17. */
  18.  
  19. public class JsonSmartTest {
  20.  
  21. //1. String <==> JsonObject
  22. public static void DecodingTest() throws ParseException {
  23. System.out.println("=======decode=======");
  24.  
  25. String s="[0,{'1':{'2':{'3':{'4':[5,{'6':7}]}}}}]";
  26. Object obj=JSONValue.parse(s);
  27. JSONArray array=(JSONArray)obj;
  28. System.out.println("======the 2nd element of array======");
  29. System.out.println(array.get(1));
  30. System.out.println();
  31.  
  32. JSONObject obj2=(JSONObject)array.get(1);
  33. System.out.println("======field \"1\"==========");
  34. System.out.println(obj2.get("1"));
  35.  
  36. s="{}";
  37. obj=JSONValue.parse(s);
  38. System.out.println(obj);
  39.  
  40. s="{\"key\":\"Value\"}";
  41. // JSONValue.parseStrict()
  42. // can be use to be sure that the input is wellformed
  43. obj=JSONValue.parseStrict(s);
  44. JSONObject obj3=(JSONObject)obj;
  45. System.out.println("====== Object content ======");
  46. System.out.println(obj3.get("key"));
  47. System.out.println();
  48.  
  49. }
  50.  
  51. public static void EncodingTest() {
  52. System.out.println("=======EncodingTest=======");
  53.  
  54. // Json Object is an HashMap<String, Object> extends
  55. JSONObject obj = new JSONObject();
  56. obj.put("name", "foo");
  57. obj.put("num", 100);
  58. obj.put("balance", 1000.21);
  59. obj.put("is_vip", true);
  60. obj.put("nickname",null);
  61.  
  62. System.out.println("Standard RFC4627 JSON");
  63. System.out.println(obj.toJSONString());
  64.  
  65. System.out.println("Compacted JSON Value");
  66. System.out.println(obj.toJSONString(JSONStyle.MAX_COMPRESS));
  67.  
  68. // if obj is an common map you can use:
  69.  
  70. System.out.println("Standard RFC4627 JSON");
  71. System.out.println(JSONValue.toJSONString(obj));
  72.  
  73. System.out.println("Compacted JSON Value");
  74. System.out.println(JSONValue.toJSONString(obj, JSONStyle.MAX_COMPRESS));
  75.  
  76. }
  77.  
  78. public static void EncodingTest2() {
  79. System.out.println("=======EncodingTest2=======");
  80.  
  81. // Json Object is an HashMap<String, Object> extends
  82. JSONObject obj = new JSONObject();
  83. obj.put("name", "foo");
  84. obj.put("num", 100);
  85. obj.put("balance", 1000.21);
  86. obj.put("is_vip", true);
  87. obj.put("nickname",null);
  88.  
  89. //Output Compressed json
  90. Object value = obj;
  91. String com_json = JSONValue.toJSONString(value, JSONStyle.MAX_COMPRESS);
  92. String json = JSONValue.toJSONString(value, JSONStyle.NO_COMPRESS);
  93.  
  94. System.out.println("Compacted JSON Value");
  95. System.out.println(com_json);
  96. System.out.println("From RFC4627 JSON String: " + JSONValue.compress(json));
  97. System.out.println("From Compacted JSON String: " + JSONValue.compress(com_json));
  98.  
  99. System.out.println("Standard RFC4627 JSON Value");
  100. System.out.println(json);
  101. System.out.println("From RFC4627 JSON String: " + JSONValue.uncompress(json));
  102. System.out.println("From Compacted JSON String: " + JSONValue.uncompress(com_json));
  103.  
  104. //from compress json string
  105. System.out.println("From compress json string(JSONObject)");
  106. Object obj2=JSONValue.parse(com_json);
  107. System.out.println(JSONValue.toJSONString(obj2, JSONStyle.NO_COMPRESS));
  108. System.out.println(JSONValue.toJSONString(obj2, JSONStyle.MAX_COMPRESS));
  109. }
  110.  
  111. //2. Java Struct <==> JsonSmart object
  112. public class Person {
  113. String name;
  114. int age;
  115. boolean single;
  116. long mobile;
  117.  
  118. public String getName(){
  119. return this.name;
  120. }
  121. public void setName(String name) {
  122. this.name = name;
  123. }
  124. public int getAge() {
  125. return this.age;
  126. }
  127. public void setAge(int age) {
  128. this.age = age;
  129. }
  130. public boolean getSingle() {
  131. return this.single;
  132. }
  133. public void setSingle(boolean single) {
  134. this.single = single;
  135. }
  136. public long getMobile() {
  137. return mobile;
  138. }
  139. public void setMobile(long mobile) {
  140. this.mobile = mobile;
  141. }
  142. }
  143.  
  144. public class JSONDomain { // for convert struct <==> json
  145. public Object result = new JSONObject();
  146.  
  147. public Object getResult() {
  148. return result;
  149. }
  150. public void setResult(Object result) {
  151. this.result = result;
  152. }
  153. }
  154.  
  155. public void Struct2JsonObject() {
  156. System.out.println("========Struct2JsonObject=======");
  157.  
  158. Person person = new Person();
  159. person.setName("json smart");
  160. person.setAge(13);
  161. person.setMobile(20130808);
  162.  
  163. Person person2 = new Person();
  164. person2.setName("test");
  165. person2.setAge(123);
  166. person2.setMobile(888666);
  167.  
  168. List<Person> array = new ArrayList<Person>();
  169. array.add(person);
  170. array.add(person2);
  171.  
  172. //1. struct <==> JsonObject
  173. JSONObject obj = new JSONObject();
  174. //obj = (Object)person; // compiler error!
  175. // way 1:
  176. JSONDomain data = new JSONDomain(); // for convert
  177. data.setResult(person);
  178. // obj = (JSONObject)data.getResult(); // run error: ClassCastException
  179. obj.put("person", data.getResult());
  180. System.out.println(JSONValue.toJSONString(obj));
  181.  
  182. // way 2:
  183. obj.put("person", array.get(1));
  184. System.out.println(JSONValue.toJSONString(obj));
  185.  
  186. //2. Container <==> JsonObject
  187. JSONArray jsonArray = new JSONArray();
  188. jsonArray.add(person);
  189. jsonArray.add(person2);
  190. JSONObject result = new JSONObject();
  191. result.put("persons", jsonArray);
  192. System.out.println(JSONValue.toJSONString(result));
  193. }
  194.  
  195. //3. JsonSmartSerializationTest
  196. public static Map<String, Object> testBytes2Map(byte[] bytes) {
  197. Map<String, Object> map = null;
  198. try {
  199. map = (Map<String, Object>) JSONValue.parseStrict((new String(bytes, "UTF-8")));
  200. } catch (ParseException e) {
  201. e.printStackTrace();
  202. } catch (UnsupportedEncodingException e) {
  203. e.printStackTrace();
  204. }
  205. return map;
  206. }
  207.  
  208. // JsonSmartSerializationTest
  209. public static byte[] testMap2Bytes(Map<String, Object> map) {
  210. String str = JSONObject.toJSONString(map);
  211. byte[] result = null;
  212. try {
  213. result = str.getBytes("UTF-8");
  214. } catch (UnsupportedEncodingException e) {
  215. e.printStackTrace();
  216. }
  217. return result;
  218. }
  219.  
  220. public static void main(String[] args) throws Exception {
  221. DecodingTest();
  222.  
  223. EncodingTest();
  224.  
  225. EncodingTest2();
  226.  
  227. JsonSmartTest test = new JsonSmartTest();
  228. test.Struct2JsonObject();
  229.  
  230. }
  231. }

参考

Java序列化与JSON序列化大比拼

Java序列化与JSON序列化大比拼2

多终端的前端架构选择

作者:zhenjing.chen 
出处:http://www.cnblogs.com/zhenjing/ 
未注明转载的文章,版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

json-smart 使用示例的更多相关文章

  1. Salesforce Apex 使用JSON数据的示例程序

    本文介绍了一个在Salesforce Apex中使用JSON数据的示例程序, 该示例程序由以下几部分组成: 1) Album.cls, 定了了封装相关字段的数据Model类 2) RestClient ...

  2. python中json的操作示例

    先上一段示例 # -*- coding: cp936 -*- import json #构造一个示例数据,并打印成易读样式 j = {} j["userName"]="a ...

  3. JSON 下 -- jansson 示例

    JSON 下 —— jansson 示例 参考网址: jansson 库的下载: http://www.digip.org/jansson/ 安装jansson 步骤: http://blog.csd ...

  4. qt qml ajax 获取 json 天气数据示例

    依赖ajax.js类库,以下代码很简单的实现了获取天气json数据并展示的任务 [TestAjax.qml] import QtQuick 2.0 import "ajax.js" ...

  5. Jackson序列化和反序列化Json数据完整示例

    Jackson序列化和反序列化Json数据 Web技术发展的今天,Json和XML已经成为了web数据的事实标准,然而这种格式化的数据手工解析又非常麻烦,软件工程界永远不缺少工具,每当有需求的时候就会 ...

  6. Json -- 语法和示例,javascript 解析Json

    1. 语法 JSON(JavaScriptObject Notation)一种简单的数据格式,比xml更轻巧.JSON是JavaScript原生格式,这意味着在JavaScript中处理JSON数据不 ...

  7. nodejs - json序列化&反序列化示例

    // demo-json.js var obj = { "name": "LiLi", "age": 22, "sex" ...

  8. android json 解析 简单示例

    1 下面是一个简单的json 解析的demo,废话不多说,直接上代码 package com.sky.gallery; import java.io.ByteArrayOutputStream; im ...

  9. python+requests+json 接口测试思路示例

    实际项目中用python脚本实现接口测试的步骤: 1 发送请求,获取响应  >>2 提取响应里的数据,对数据进行必要的处理  >>3 断言响应数据是否与预期一致 以豆瓣接口为例 ...

  10. jQuery中使用Ajax获取JSON格式数据示例代码

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.JSONM文件中包含了关于“名称”和“值”的信息.有时候我们需要读取JSON格式的数据文件,在jQuery中 ...

随机推荐

  1. unpivot,pivot,case when ,行转列,列转行 sql server

    http://technet.microsoft.com/zh-cn/library/ms177410.aspx unpivot : CREATE TABLE pvt (VendorID int, E ...

  2. c#-Artificial Intelligence Class

    NET Artificial Intelligence Class http://www.codeproject.com/KB/recipes/aforge_neuro/neuro_src.zip

  3. Eclipse生成jsp 如何将GB18030 改成默认UTF-8

    前两天面试被问到了struts的问题,好久没用了准备复习下,用eclipse创建一个maven项目的时候发现创建的jsp文件都是GB18030编码的,如何更改为UTF-8呢,其实很简单,给各位分享一下 ...

  4. android 使用asm.jar将android手机屏幕投射到电脑

    使用asm.jar将Android手机到电脑屏幕投影 有时候可能须要将手机上的一些操作投影出来,比方一些App Demo的展示等.事实上,有专门的硬件设备能干这件事儿.但不是必需专门为展示个Demo去 ...

  5. 根据Unix哲学来编写你的HTML5 Websocket服务器来实现全双工通信

    websocketd代表WebSocket的守护进程 websocketd处理的是浏览器和服务器之间的WebSocket连接,它会启动你所指定的服务器端应用来对WebSockets进行处理,然后在浏览 ...

  6. 一个大浪Java罢工(一个)安装JDK和环境变量配置

    一个.基础知识 (一)什么是Java? Java是一种能够撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台( ...

  7. phpstorm安装laravel-ide-helper实现自动完成、代码提示和跟踪

    本文讲述laravel-ide-helper的安装方法.phpstorm安装了laravel-ide-helper后可以实现代码提示.跟踪和自动补全,减少查看API文档的次数,提高开发效率. lara ...

  8. WeChatAPI 开源系统架构详解

    WeChatAPI 开源系统架构详解 如果使用WeChatAPI,它扮演着什么样的角色? 从图中我们可以看到主要分为3个部分: 1.业务系统 2.WeChatAPI: WeChatWebAPI,主要是 ...

  9. 部分PC端安卓管理器使用强行断开重连的方法来连接手机,容易丢书数据,损坏数据

    最近发现部分PC端的安卓管理器,貌似是百度影音以及PPTV的安卓客户端,使用强行断开手机连接,然后重新连接手机的方法,来实现客户端程序连接手机. 此时,如果刚好正在复制文件,则复制的文件会损坏,并且基 ...

  10. c# 委托详解

    1.委托声明 2.委托入门实例 namespace ConsoleApplication1 { public delegate void methodDelegate(string str); cla ...