zoukankan      html  css  js  c++  java
  • JSON以及Java转换JSON的方法(前后端常用处理方法)

    本文主要讲述如下几个内容:

    1、JSON定义以及JSON的特性

    2、如何在JavaScript中解释JSON格式数据

    3、如何在Java代码中使用JSON(讲对象转换成JSON对象以及解释JSON字符串)

    一、JSON

       w3c上对JSON有比较详细的介绍,链接http://www.w3school.com.cn/json/index.asp.下面仅讲述重要的几点。

    Json是 javascript 对象表示法(JavaScript Object Notation),是轻量级的文本数据交换格式,具有层级结构(值中存在值), 数据可使用 AJAX 进行传输,独立于语言,具有自我描述性,比XML更小更快更容易解析。JSON格式字符串转化为JavaScript对象无需解析器, JSON 使用 JavaScript 语法,使用JavaScript的eval()函数可生成JavaScript对象。

    下面给出JSON格式的数据,非常清晰,无需多做解释,语法请阅读官方文档。

    标准JSON格式数据

    { "firstName":"John" , "lastName":"Doe" }
    标准JSON格式数组数据

    {
    "employees": [
    { "firstName":"John" , "lastName":"Doe" },
    { "firstName":"Anna" , "lastName":"Smith" },
    { "firstName":"Peter" , "lastName":"Jones" }
    ]
    }
    或直接赋值给变量:

    var employees = [
    { "firstName":"Bill" , "lastName":"Gates" },
    { "firstName":"George" , "lastName":"Bush" },
    { "firstName":"Thomas" , "lastName": "Carter" }
    ];


    二、在JavaScript中解释JSON数据

    JSON 最常见的用法之一,是从 web 服务器上读取 JSON 数据(作为文件或作为 HttpRequest),将 JSON 数据转换为 JavaScript 对象,然后在网页中使用该数据。

    下面直接给出代码示例:

    1. <pre name="code" class="html"><html>  
    2. <head>  
    3. </head>  
    4. <script type="text/javascript">  
    5. function  testjson(){  
    6.   
    7. //Json格式的字符串  
    8. var txt = '{ "employees" : [' +  
    9. '{ "firstName":"Bill" , "lastName":"Gates" },' +  
    10. '{ "firstName":"George" , "lastName":"Bush" },' +  
    11. '{ "firstName":"Thomas" , "lastName":"Carter" } ]}';  
    12.   
    13. //使用eval函数转换成JSON对象  
    14. //eval() 函数使用的是 JavaScript 编译器,可解析 JSON 文本,然后生成 JavaScript 对象。必须把文本包围在括号中,这样才能避免语法错误:  
    15. var obj = eval ("(" + txt   
    16.     + ")");  
    17. //通过对象名,然后根据数组下标以及属性名取值  
    18. alert(obj.employees[0].firstName);  
    19. }  
    20.   
    21. </script>  
    22. <body>  
    23.     <a href="" onclick="testjson()">Click me!</a>  
    24. </body>  
    25. </html>  

    
    

    直接保存为后缀名为html或htm的文件,用浏览器打开,就可以测试运行结果了。

    三、Java操作JSON

    1、Josn-lib

    JSON-lib这个Java类包用于把bean,map和XML转换成JSON并能够把JSON转回成bean和DynaBean。

    下载地址:http://json-lib.sourceforge.NET/

    还要需要的第3方包:

    rg.apache.commons(3.2以上版本)

    org.apache.oronet.sf.

    ezmorph(ezmorph-1.0.4.jar)

    nu.xom

    下面直接给出代码:

    1. package com.doyeden.json;  
    2.   
    3. import java.util.ArrayList;  
    4. import java.util.HashMap;  
    5. import java.util.List;  
    6. import java.util.Map;  
    7.   
    8. import org.apache.commons.beanutils.PropertyUtils;  
    9.   
    10. import net.sf.json.JSONArray;  
    11. import net.sf.json.JSONObject;  
    12. import net.sf.json.xml.XMLSerializer;  
    13.   
    14. public class TestJson {  
    15.     public static void main(String[] args) {  
    16.   
    17.         // 1. List  
    18.         boolean[] booleanArray = new boolean[] { falsefalsetruefalse };  
    19.         JSONArray ja = JSONArray.fromObject(booleanArray);  
    20.         System.err.println(ja);  
    21.   
    22.         List list = new ArrayList();  
    23.         list.add("first");  
    24.         list.add("second");  
    25.         JSONArray jsonArray2 = JSONArray.fromObject(list);  
    26.         System.out.println(jsonArray2);  
    27.   
    28.         JSONArray jsonArray3 = JSONArray.fromObject("['json','is','easy']");  
    29.         System.out.println(jsonArray3);  
    30.   
    31.         // 2. Map  
    32.         Map map = new HashMap();  
    33.         map.put("name""json");  
    34.         map.put("bool", Boolean.TRUE);  
    35.         map.put("int"new Integer(1));  
    36.         map.put("arr"new String[] { "a""b" });  
    37.         map.put("func""function(i){ return this.arr[i]; }");  
    38.         JSONObject json = JSONObject.fromObject(map);  
    39.         System.out.println(json);  
    40.   
    41.         // 3. JSON Bean  
    42.         JSONObject jsonObject = JSONObject.fromObject(new JsonBean("kevin",  
    43.                 "Male"));  
    44.         System.out.println(jsonObject);  
    45.   
    46.         // 4. Json Beans  
    47.         List<JsonBean> lbs = new ArrayList<JsonBean>();  
    48.         JsonBean j1 = new JsonBean("kevin""Male");  
    49.         JsonBean j2 = new JsonBean("maimai""Femal");  
    50.         lbs.add(j1);  
    51.         lbs.add(j2);  
    52.         JSONArray ja_beans = JSONArray.fromObject(lbs);  
    53.         System.out.println(ja_beans);  
    54.   
    55.     }  
    56. }  

    下面的类的get和set方法必须有才可以

    1. package com.doyeden.json;  
    2.   
    3. public class JsonBean {  
    4.     private String name;  
    5.     private String sex;  
    6.       
    7.     public JsonBean() {  
    8.         super();  
    9.     }  
    10.     public JsonBean(String name, String sex) {  
    11.         super();  
    12.         this.name = name;  
    13.         this.sex = sex;  
    14.     }  
    15.     public String getName() {  
    16.         return name;  
    17.     }  
    18.     public void setName(String name) {  
    19.         this.name = name;  
    20.     }  
    21.     public String getSex() {  
    22.         return sex;  
    23.     }  
    24.     public void setSex(String sex) {  
    25.         this.sex = sex;  
    26.     }  
    27.       
    28. }  

    程序运行结果:

    1. [false,false,true,false]  
    2. ["first","second"]  
    3. ["json","is","easy"]  
    4. {"arr":["a","b"],"int":1,"name":"json","func":function(i){ return this.arr[i]; },"bool":true}  
    5. {"name":"kevin","sex":"Male"}  
    6. [{"name":"kevin","sex":"Male"},{"name":"maimai","sex":"Femal"}]  
    2、 目前比较流行的fast-json解析 ,更多fast-json请自行查阅文档

    阿里巴巴FastJson是一个Json处理工具包,包括“序列化”和“反序列化”两部分,它具备如下特征:
    速度最快,测试表明,fastjson具有极快的性能,超越任其他的Java Json parser。包括自称最快的JackJson;
    功能强大,完全支持java Bean、集合、Map、日期、Enum,支持范型,支持自省;无依赖,能够直接运行在

    Java SE 5.0以上版本;支持Android;开源 (Apache 2.0)

    Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。

    public static final Object parse(String text); // 把JSON文本parse为JSONObject或者JSONArray 
    public static final JSONObject parseObject(String text); // 把JSON文本parse成JSONObject    
    public static final  T parseObject(String text, Class clazz); // 把JSON文本parse为JavaBean 
    public static final JSONArray parseArray(String text); // 把JSON文本parse成JSONArray 
    public static final  List parseArray(String text, Class clazz); //把JSON文本parse成JavaBean集合 
    public static final String toJSONString(Object object); // 将JavaBean序列化为JSON文本 
    public static final String toJSONString(Object object, boolean prettyFormat); // 将JavaBean序列化为带格式的JSON文本 
    public static final Object toJSON(Object javaObject); 将JavaBean转换为JSONObject或者JSONArray。

      实例代码:

    (需要导入fastjson的jar包)

    1. package com.doyeden.json.fastjson;  
    2.   
    3. import java.util.ArrayList;  
    4. import java.util.List;  
    5.   
    6. import com.alibaba.fastjson.JSON;  
    7. import com.doyeden.json.JsonBean;  
    8.   
    9. public class Test {  
    10.     public static void main(String[] args) {  
    11.           
    12.         //1 parse bean to json text  
    13.         JsonBean jb=new JsonBean("kevin","Male");  
    14.         System.out.println(JSON.toJSONString(jb));  
    15.           
    16.         //2 parse list to json array  
    17.         List<JsonBean> ljs=new ArrayList<JsonBean>();  
    18.         JsonBean jb1=new JsonBean("kevin","Male");  
    19.         JsonBean jb2=new JsonBean("maimai","Female");  
    20.         ljs.add(jb2);  
    21.         ljs.add(jb1);  
    22.         System.out.println(JSON.toJSONString(ljs));  
    23.           
    24.         //3 parse json text to bean  
    25.         String s="{"name":"greg","sex":"Male"}";  
    26.         JSON jO=JSON.parseObject(s);  
    27.         JsonBean j=JSON.toJavaObject(jO, JsonBean.class);  
    28.         System.out.println(j.getName());  
    29.           
    30.     }  
    31. }  

    结果:

    {"name":"kevin","sex":"Male"}
    [{"name":"maimai","sex":"Female"},{"name":"kevin","sex":"Male"}]
    greg

    3、其他方式,例如 org-lib等,使用方法跟上述两种方式非常相似。就不做更多介绍了。个人推荐还是使用fast-json。

    总结:本文讲述了JSON格式数据以及如何在JavaScript和Java代码中操作JSON格式数据,可以发现,因为JSON自解释性,轻量级,体积小,跨平台等特点,JSON格式数据非常适合作为和后端数据交互的格式。JavaScript本身就可以解释JSON,这样就省去了很多第三方库,java中,关于讲JSON转换成Java对象以及讲Java对象和对象数组转换成JSON格式数据的类库其实有很多,但是目前来说最快的是fastjson.

    转自:http://blog.csdn.net/kevinofneu/article/details/36542499

  • 相关阅读:
    五.Flink实时项目电商用户行为分析之订单支付实时监控
    四.Flink实时项目电商用户行为分析之恶意登录监控
    三.Flink实时项目电商用户行为分析之市场营销商业指标统计分析
    二.Flink实时项目电商用户行为之实时流量统计
    一.Flink实时项目电商用户行为分析之实时热门商品统计
    Flink 流处理API之实现UDF函数——更细粒度的控制流
    二.Flink 流处理API之Transform
    5组-Alpha冲刺-1/6
    5组 需求分析报告
    5组 团队展示
  • 原文地址:https://www.cnblogs.com/jpfss/p/7233436.html
Copyright © 2011-2022 走看看