java中JSON数据的转换

JSONObject能够将Java对象转成json格式的字符串,也可以将json格式的字符串转换成Java对象,也可以将array 转换为json格式的字符串。json格式的字符转换为 list 对象等等。
例如:将java对象转成json格式的字符串

public class JsonTest {
        
        private String name;
        private String age;
     
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getAge() {
            return age;
        }
        public void setAge(String age) {
            this.age = age;
        }
        public static void main(String[] args) throws ParseException {
            JsonTest jt = new JsonTest();
            jt.setAge("14");
            jt.setName("zhangsan");
         
            //对象转字符串类型的json
           
            String st=JSONObject.fromObject(jt).toString();
            System.out.println(st);//打印结果:{"age":"14","name":"zhangsan"}
        }
    
}
如果对象中带有日期属性Date,这时候我们需要对对象转为字符串的过程加以控制,我们需要对对象转为字符串的过程加以控制,这就用到了JSON lib提供了JsonConfig、JsonValueProcessor对象,这时JSONObject默认会将Date属性转换成这样的格式:
Html代码   收藏代码
  1. {"nanos":0,"time":-27076233600000,"minutes":0,"seconds":0,"hours":0,"month":11,"timezoneOffset":-480,"year":-789,"day":5,"date":22}  

 而这种格式肯定是非常难以理解的,为了将Date转换为我们认识的“yyyy-MM-dd”格式,需要做以下操作。

 

首先创建一个时间转换器必须实现JsonValueProcessor接口

 
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;

public class JsonDateValueProcessor implements JsonValueProcessor {
    private String format = "yyyy-MM-dd";

    public JsonDateValueProcessor() {
        super();
    }

    public JsonDateValueProcessor(String format) {
        super();
        this.format = format;
    }

    @Override
    public Object processArrayValue(Object paramObject, JsonConfig paramJsonConfig) {
        return process(paramObject);
    }

    @Override
    public Object processObjectValue(String paramString, Object paramObject, JsonConfig paramJsonConfig) {
        return process(paramObject);
    }

    private Object process(Object value) {
        if (value instanceof Date) {
            SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.CHINA);
            return sdf.format(value);
        }
        return value == null ? "" : value.toString();
    }

}

然后在调用JSONObject之前创建一个JsonConfig,并且将上一步定义的date转换器注册进去:

Java代码  

  1. JsonConfig jsonConfig = new JsonConfig();  
  2. jsonConfig.registerJsonValueProcessor(Date.classnew JsonDateValueProcessor());

最后将JsonConfig放入JSONObject对象中,这里针对不同的数据类型有多种方式放入JsonConfig:

Java代码  
  1. JSONObject json = new JSONObject();  
  2. //Map转JSON  
  3. json.putAll(Map, jsonConfig);  

 或者

Java代码 

  1. JSONObject json = new JSONObject();  
  2. //JavaBean转JSON  
  3. json.fromObject(object, jsonConfig) 

最后我们看到的结果就是只要JavaBean中有Date对象,转换成JSON字符串时就会变成“yyyy-MM-dd”格式

例如

public class JsonTest {
        
        private String name;
        private String age;
        private Date date;
       
        public Date getDate() {
            return date;
        }

        public void setDate(Date date) {
            this.date = date;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getAge() {
            return age;
        }

        public void setAge(String age) {
            this.age = age;
        }
        
        public static void main(String[] args) {
            JsonTest jt = new JsonTest();
            jt.setAge("14");
            jt.setName("zhangsan");
            jt.setDate(new Date());
            //对象转字符串类型的json
            JsonConfig jsonConfig = new JsonConfig();
            jsonConfig.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor());
            String st=JSONObject.fromObject(jt,jsonConfig).toString();
            System.out.println(st);//打印结果:{"age":"14","date":"2018-01-17","name":"zhangsan"}
        }
    
}

json类型的字符串转对象类型:

public class JsonTest {
        
        private String name;
        private String age;
        private Date date;
       
        public Date getDate() {
            return date;
        }

        public void setDate(Date date) {
            this.date = date;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }


        public String getAge() {
            return age;
        }


        public void setAge(String age) {
            this.age = age;
        }
        
        public static void main(String[] args) {
       
            String str = "{\"age\":\"14\",\"date\":\"2018-01-17\",\"name\":\"zhangsan\"}";
            //先把string转为json
            JSONObject jsoStr = JSONObject.fromObject(str);
            JsonTest jsobj = (JsonTest) JSONObject.toBean(jsoStr, JsonTest.class);
            System.out.println(jsobj.getName());
            
        }
    
}

json格式的字符转换为 list 对象

String str = "[{\"age\":\"14\",\"date\":\"2018-01-17\",\"name\":\"zhangsan\"},{\"age\":\"15\",\"date\":\"2018-05-17\",\"name\":\"lisi\"}]";
            //先把string转为json
            JSONArray jsoStr = JSONArray.fromObject(str);
            List<JsonTest>  jsobj =( List<JsonTest>)JSONArray.toCollection(jsoStr,JsonTest.class);
            for(int i=0;i<jsobj.size();i++){
                String age=jsobj.get(i).getAge();
                System.out.println(age);
            }

collection转为字符串

 public static String array2json(Collection<?> coll) {
      
        JSONArray jsonArray = JSONArray.fromObject(coll, jsonConfig);
        return jsonArray.toString();
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值