我有一个JSON响应,其中包含很多实时日期。例如:“ 2017-01-01T22:54:24.931Z”。
如何删除每次出现的日期并将其替换为null或空字符串(通过Java代码)?
答案 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;
}
}
}
如果您使用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