如何使用json-lib实现Java和JSON之间的转换

1. json-lib是一个java类库,提供将Java对象,包括beans, maps, collections, java arrays and XML等转换成JSON,或者反向转换的功能。

2. json-lib 主页 : http://json-lib.sourceforge.net/

3.执行环境

需要以下类库支持

jakarta commons-lang 2.5

jakarta commons-beanutils 1.8.0

jakarta commons-collections 3.2.1

jakarta commons-logging 1.1.1

ezmorph 1.0.6

4.功能示例

这里通过JUnit-Case例子给出代码示例

package com.mai.json;  

import static org.junit.Assert.assertEquals;  

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import net.sf.ezmorph.Morpher;
import net.sf.ezmorph.MorpherRegistry;
import net.sf.ezmorph.bean.BeanMorpher;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.util.JSONUtils;  

import org.apache.commons.beanutils.PropertyUtils;
import org.junit.Test;  

public class JsonLibTest {  

    /*
     *  普通类型、List、Collection等都是用JSONArray解析
     *
     *  Map、自定义类型是用JSONObject解析
     *  可以将Map理解成一个对象,里面的key/value对可以理解成对象的属性/属性值
     *  即{key1:value1,key2,value2......}
     *
     * 1.JSONObject是一个name:values集合,通过它的get(key)方法取得的是key后对应的value部分(字符串)
     *         通过它的getJSONObject(key)可以取到一个JSONObject,--> 转换成map,
     *         通过它的getJSONArray(key) 可以取到一个JSONArray ,
     *
     *
     */  

    //一般数组转换成JSON
    @Test
    public void testArrayToJSON(){
        boolean[] boolArray = new boolean[]{true,false,true};
        JSONArray jsonArray = JSONArray.fromObject( boolArray );
        System.out.println( jsonArray );
        // prints [true,false,true]
    }  

    //Collection对象转换成JSON
    @Test
    public void testListToJSON(){
        List list = new ArrayList();
        list.add( "first" );
        list.add( "second" );
        JSONArray jsonArray = JSONArray.fromObject( list );
        System.out.println( jsonArray );
        // prints ["first","second"]
    }  

    //字符串json转换成json, 根据情况是用JSONArray或JSONObject
    @Test
    public void testJsonStrToJSON(){
        JSONArray jsonArray = JSONArray.fromObject( "['json','is','easy']" );
        System.out.println( jsonArray );
        // prints ["json","is","easy"]
    }  

    //Map转换成json, 是用jsonObject
    @Test
    public void testMapToJSON(){
        Map map = new HashMap();
        map.put( "name", "json" );
        map.put( "bool", Boolean.TRUE );
        map.put( "int", new Integer(1) );
        map.put( "arr", new String[]{"a","b"} );
        map.put( "func", "function(i){ return this.arr[i]; }" );    

        JSONObject jsonObject = JSONObject.fromObject( map );
        System.out.println( jsonObject );
    }  

    //复合类型bean转成成json
    @Test
    public void testBeadToJSON(){
        MyBean bean = new MyBean();
        bean.setId("001");
        bean.setName("银行卡");
        bean.setDate(new Date());  

        List cardNum = new ArrayList();
        cardNum.add("农行");
        cardNum.add("工行");
        cardNum.add("建行");
        cardNum.add(new Person("test"));  

        bean.setCardNum(cardNum);  

        JSONObject jsonObject = JSONObject.fromObject(bean);
        System.out.println(jsonObject);  

    }  

    //普通类型的json转换成对象
    @Test
    public void testJSONToObject() throws Exception{
        String json = "{name=\"json\",bool:true,int:1,double:2.2,func:function(a){ return a; },array:[1,2]}";
        JSONObject jsonObject = JSONObject.fromObject( json );
        System.out.println(jsonObject);
        Object bean = JSONObject.toBean( jsonObject );
        assertEquals( jsonObject.get( "name" ), PropertyUtils.getProperty( bean, "name" ) );
        assertEquals( jsonObject.get( "bool" ), PropertyUtils.getProperty( bean, "bool" ) );
        assertEquals( jsonObject.get( "int" ), PropertyUtils.getProperty( bean, "int" ) );
        assertEquals( jsonObject.get( "double" ), PropertyUtils.getProperty( bean, "double" ) );
        assertEquals( jsonObject.get( "func" ), PropertyUtils.getProperty( bean, "func" ) );
        System.out.println(PropertyUtils.getProperty(bean, "name"));
        System.out.println(PropertyUtils.getProperty(bean, "bool"));
        System.out.println(PropertyUtils.getProperty(bean, "int"));
        System.out.println(PropertyUtils.getProperty(bean, "double"));
        System.out.println(PropertyUtils.getProperty(bean, "func"));
        System.out.println(PropertyUtils.getProperty(bean, "array"));  

        List arrayList = (List)JSONArray.toCollection(jsonObject.getJSONArray("array"));
        for(Object object : arrayList){
            System.out.println(object);
        }  

    }  

    //将json解析成复合类型对象, 包含List
    @Test
    public void testJSONToBeanHavaList(){
        String json = "{list:[{name:'test1'},{name:'test2'}],map:{test1:{name:'test1'},test2:{name:'test2'}}}";
//        String json = "{list:[{name:'test1'},{name:'test2'}]}";
        Map classMap = new HashMap();
        classMap.put("list", Person.class);
        MyBeanWithPerson diyBean = (MyBeanWithPerson)JSONObject.toBean(JSONObject.fromObject(json),MyBeanWithPerson.class , classMap);
        System.out.println(diyBean);  

        List list = diyBean.getList();
        for(Object o : list){
            if(o instanceof Person){
                Person p = (Person)o;
                System.out.println(p.getName());
            }
        }
    }  

    //将json解析成复合类型对象, 包含Map
    @Test
    public void testJSONToBeanHavaMap(){
        //把Map看成一个对象
        String json = "{list:[{name:'test1'},{name:'test2'}],map:{testOne:{name:'test1'},testTwo:{name:'test2'}}}";
        Map classMap = new HashMap();
        classMap.put("list", Person.class);
        classMap.put("map", Map.class);
        //使用暗示,直接将json解析为指定自定义对象,其中List完全解析,Map没有完全解析
		// 查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/Java/
        MyBeanWithPerson diyBean = (MyBeanWithPerson)JSONObject.toBean(JSONObject.fromObject(json),MyBeanWithPerson.class , classMap);
        System.out.println(diyBean);  

        System.out.println("do the list release");
        List<Person> list = diyBean.getList();
        for(Person o : list){
            Person p = (Person)o;
            System.out.println(p.getName());
        }  

        System.out.println("do the map release");  

        //先往注册器中注册变换器,需要用到ezmorph包中的类
        MorpherRegistry morpherRegistry = JSONUtils.getMorpherRegistry();
        Morpher dynaMorpher = new BeanMorpher( Person.class,  morpherRegistry);
        morpherRegistry.registerMorpher( dynaMorpher );    

        Map map = diyBean.getMap();
        /*这里的map没进行类型暗示,故按默认的,里面存的为net.sf.ezmorph.bean.MorphDynaBean类型的对象*/
        System.out.println(map);
      /*输出:
        {testOne=net.sf.ezmorph.bean.MorphDynaBean@f73c1[
          {name=test1}
        ], testTwo=net.sf.ezmorph.bean.MorphDynaBean@186c6b2[
          {name=test2}
        ]}
      */
        List<Person> output = new ArrayList();
        for( Iterator i = map.values().iterator(); i.hasNext(); ){
            //使用注册器对指定DynaBean进行对象变换
           output.add( (Person)morpherRegistry.morph( Person.class, i.next() ) );
        }    

        for(Person p : output){
            System.out.println(p.getName());
        /*输出:
          test1
          test2
        */
        }  

    }  

}

5.下面提供上面例子所需的资源,包括jar包和代码

/Files/mailingfeng/json-lib/json-lib用例所需jar包和java类.rar

http://download.csdn.net/detail/shimiso/7058455

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索json
, bean
, 返回list、bean
, jsonarray
, json java
, list map
, system
, java json 解析
, jsonobject
, map list 转换问题
, map net
, list bean 文件
, java json map
println
java json lib、java json lib 下载、java 解析json lib、json rpc java实现、java实现解析json,以便于您获取更多的相关知识。

时间: 2024-12-22 08:14:21

如何使用json-lib实现Java和JSON之间的转换的相关文章

java web-json Bean之间的转换问题

问题描述 json Bean之间的转换问题 我是个外行,大学学的是java虽然工作快6年了,可java写写代码这手艺一直没丢,但是我的代码很多都是野路子,怎么说呢,不优雅. 就像最近遇到个问题: 我的网址给一个提供Oauth2.0API 数据查询的一个网站. 我的方法是: 每次请求都一样,只期待对方网站返回特定格式的json. 然后用httpclient把那个json转化成一个String,然后一堆操作后变成一个bean对象. 这样给我带来很多麻烦,比如:1效率问题,2.我不能灵活的变化我想获取

大神帮忙解答一下这个json数据怎么在java里用json lib解析存放到List里

问题描述 大神帮忙解答一下这个json数据怎么在java里用json lib解析存放到List里 [ { "city": "", "citys": [ { "city": "北京", "id": 2, "level": 2, "province": "北京", "seq": 0, "x":

Json字符串转换为java对象的各种实现方法【json_lib框架、Gson、org.json】

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://mengzhengbin520.blog.51cto.com/7590564/1283361 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - Decembe

Java的JSON转换库GSON的基本使用方法示例_java

下载和部署GSONGSON的GitHub页面地址:https://github.com/google/gson 在使用GSON API工作之前,你需要下载库(jar文件),并将其包含到类路径中.库,连同源代码和Java文档,都可以从http://code.google.com/p/google-gson/downloads/list下载.下载完毕后,添加gson-<version>.jar到类路径.对于那些偏好使用Maven管理依赖(JAR文件)的读者,添加如下依赖到pom.xml. <

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),是轻量级的文本数据交换格式,具

java生成json数据示例_java

JsonTools.java 复制代码 代码如下: package com.lihua.json.tools; import net.sf.json.JSONObject; public class JsonTools {  public JsonTools() {  }  /**   * @param key   *            表示json字符串的头信息   * @param value   *            是对解析的集合的类型   * @return   */  //将

Gson对Java嵌套对象和JSON字符串之间的转换

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,具有良好的跨平台特性.近几年来已经和XML一样成为C/S架构中广泛采用的数据格式.有关JSON的更多知识,请参考以下内容:http://json.org/json-zh.html 在服务器和客户端之间使用JSON数据格式进行通信,经常会涉及到JAVA对象和JSON字符串之间的转换.通常,我们可以使用一些JSON解析工具,例如:Gson,FastJson等.当然,我们也可以手动解析,只是会比较繁琐. 下面

Java JWT: JSON Web Token

  Java JWT: JSON Web Token for Java and Android JJWT aims to be the easiest to use and understand library for creating and verifying JSON Web Tokens (JWTs) on the JVM. JJWT is a Java implementation based on the JWT, JWS, JWE, JWK and JWA RFC specific

Java 下的 JSON库性能比较:JSON.simple vs. GSON vs. Jackson vs. JSONP

Java 下的 JSON库性能比较:JSON.simple vs. GSON vs. Jackson vs. JSONP JSON已经成为当前服务器与WEB应用之间数据传输的公认标准,不过正如许多我们所习以为常的事情一样,你会觉得这是理所当然的便不再深入思考了.我们很少会去想用到的这些JSON库到底有什么不同,但事实上它们的确是不太一样的.因此,我们运行了一个基准测试来对常用的几个JSON库进行了测试,看看在解析不同大小的文件时哪个库的速度是最快的.下面我会把结果分享给大家. JSON通常用于传