删除JSON中所有出现的日期

时间:2018-12-17 15:23:26

标签: java date

我有一个JSON响应,其中包含很多实时日期。例如:“ 2017-01-01T22:54:24.931Z”。

如何删除每次出现的日期并将其替换为null或空字符串(通过Java代码)?

2 个答案:

答案 0 :(得分:3)

这可以满足您的需求。在String中读取整个文件内容,然后:

    s = s.replaceAll("\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z", "");

然后所有指定格式的日期将从字符串中删除

此代码无法验证日期的有效性(例如,2018-20-20 ...),但可能对您而言不是必需的。

答案 1 :(得分:0)

下面的链接没有几个选项可用于json日期反序列化。

if (window.JSON && !window.JSON.dateParser) {
    var reISO = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*))(?:Z|(\+|-)([\d|:]*))?$/;

    JSON.dateParser = function (key, value) {
        if (typeof value === 'string') {
            var a = reISO.exec(value);
            if (a)
                return null;

        }
    }
}

https://weblog.west-wind.com/posts/2014/Jan/06/JavaScript-JSON-Date-Parsing-and-real-Dates#Caveats-of-overriding-JSON-Parsing

如果您使用Java和jakson,请考虑使用@JsonDeserialize解释并为JSON日期字段分配新值。

@JsonDeserialize注释告诉Jackson在将JSON反序列化为Java对象时使用自定义反序列化器。 为此,您需要对要应用自定义反序列化器的字段进行注释。

使用@JsonDeserialize批注的Java类是:

import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import guru.springframework.blog.jsonannotation.domain.custom.CustomDateDeserializer;
import java.util.Date;
public class DeserializeDemoBean {
    public long personId = 123L;
    public String  name = "James Clark";
    @JsonDeserialize(using = CustomDateDeserializer.class)
    public Date activeDate;
    @Override
    public String toString() {
        return "DeserializeDemoBean{" +
                "personId=" + personId +
                ", name='" + name + '\'' +
                ", activeDate=" + activeDate +
                '}';
    }
}

前面的DeserializeDemoBeanbean类引用的自定义反序列化器为:

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
import java.text.ParseException;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class CustomDateDeserializer extends StdDeserializer<Date> {
    private static SimpleDateFormat simpleDateFormat =
            new SimpleDateFormat("dd-MM-yyyy hh:mm:ss");
    public CustomDateDeserializer(){
        this(null);
    }
    public CustomDateDeserializer(Class<?> c){
        super(c);
    }
    @Override
    public Date deserialize(JsonParser jsonParser, DeserializationContext
            deserializationContext) throws IOException, JsonProcessingException {
        String date = jsonParser.getText();
        try {
            //Check or implement any custom logic or include Regex patter to identify date pattern and return null or empty
            return null;
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
    }
}

参考:https://dzone.com/articles/jackson-annotations-for-json-part-3-deserialization