json-lib字符串格式化

将Date对象导出为JSON时,会出现下面的格式

Sep 17, 2018 6:33:43 PM

或者直接将Date对象所有属性输出

{"date":{"date":19,"day":3,"hours":9,"minutes":2,"month":8,"seconds":9,"time":1537318929506,"timezoneOffset":-480,"year":118},其他}

如果将时间格式化为2018-09-19 09:02:10的形式,方便了前端的解析,也让json比较简洁。

可以实现JsonValueProcessor接口,用来指定转换后的格式。

示例代码:

package com.hjwblog.JSONtest;

import net.sf.ezmorph.object.DateMorpher;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
import net.sf.json.util.JSONUtils;


import java.util.Date;

public class FormatDate {
    public static void main(String[] args) {


        TestBeam testBeam = new TestBeam();
        System.out.println("原对象:" + testBeam);
        //将对象转为JSON字符串
        JsonConfig jsonConfig = new JsonConfig();
        jsonConfig.registerJsonValueProcessor(Date.class, new JsonDateValueProcessorUtil());

        JSONObject newJsonObject = JSONObject.fromObject(testBeam, jsonConfig);

        String outString = newJsonObject.toString();
        System.out.println("JSON:" + outString);

        //将JSON字符串转为对象
        System.out.println("\n将JSON字符串转为对象-------------");

        String jsonString = "{\"date\":\"2016-09-19 09:23:26\",\"i\":1}";

        System.out.println("原字符串:" + jsonString);

        JsonConfig config = new JsonConfig();
        config.setRootClass(TestBeam.class);

        可转换的日期格式,即Json串中可以出现以下格式的日期与时间
        JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(new String[]{"yyyy-MM-dd HH:mm:ss"}));

        //从字符串构建JSONObject
        JSONObject toObj = JSONObject.fromObject(jsonString);

        //转Beam对象
        TestBeam fromJSON = (TestBeam) JSONObject.toBean(toObj, TestBeam.class);
        System.out.println("从字符串转过来的对象:" + fromJSON);
    }
}

输出:

原对象:date:Wed Sep 19 09:33:13 CST 2018  i:1
JSON:{"date":"2018-09-19 09:33:13","i":1}

将JSON字符串转为对象-------------
原字符串:{"date":"2016-09-19 09:23:26","i":1}
从字符串转过来的对象:date:Mon Sep 19 09:23:26 CST 2016  i:1

完整代码:

先随便写个Beam,用于转换

package com.hjwblog.JSONtest;

import java.util.Date;

public class TestBeam {
    public TestBeam() {
        this.date = new Date();
        this.i = 1;
    }

    public Date getDate() {
        return date;
    }

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

    public int getI() {
        return i;
    }

    public void setI(int i) {
        this.i = i;
    }

    @Override
    public String toString() {
        return "date:" + date + "  i:" + i;
    }

    Date date;
    int i;

}

实现JsonValueProcessor接口,用来指定转换后的格式。

package com.hjwblog.JSONtest;

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

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

/**
 * 时间转换器(将返回的json数据中的日期格式转换为指定格式)
 */
public class JsonDateValueProcessorUtil implements JsonValueProcessor {
    private String format = "yyyy-MM-dd HH:mm:ss";

    public JsonDateValueProcessorUtil() {
        super();
    }

    public JsonDateValueProcessorUtil(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();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java是一种面向对象的编程语言,目前在应用程序开发中被广泛使用。校验JSON格式是Java中一项非常重要的任务,在开发中经常需要对JSON数据进行格式验证。JSONJavaScript对象表示法的缩写,它是一种轻量级的数据交换格式。 在Java中,我们可以使用标准的JSON库来校验JSON格式。例如,可以使用Jackson、Gson或JSON-lib等库来解析JSON数据并验证其格式是否正确。这些库都提供了丰富的API来校验JSON格式,并且易于使用。 下面是使用Jackson库进行JSON格式校验的示例代码: ```java import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.exc.MismatchedInputException; public class JsonValidator { private static ObjectMapper objectMapper = new ObjectMapper(); public static boolean isValidJson(String jsonStr) { try { JsonNode jsonNode = objectMapper.readTree(jsonStr); return true; } catch (MismatchedInputException e) { return false; } catch (Exception e) { return false; } } } ``` 该代码会将JSON字符串传入isValidJson()方法中,使用Jackson库的readTree()方法来解析JSON数据,并返回解析结果。如果解析失败,则说明JSON格式不正确,方法会返回false。如果解析成功,则说明JSON格式正确,方法返回true。 使用上述代码可以轻松地校验JSON格式。当然,也可以在需要的情况下进行定制化的校验,例如校验JSON键名、键值类型等,以适应各种业务需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值