Удаление всех вхождений даты в формате JSON - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть ответ JSON, в котором много дат в реальном времени.Например: «2017-01-01T22: 54: 24.931Z».

Как удалить все вхождения даты и заменить их пустой или пустой строкой (через код Java)?

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Ниже ссылки имеют несколько опций для работы с десериализацией даты 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 указывает Джексону использовать пользовательский десериализатор при десериализации объекта JSON в Java.Для этого необходимо аннотировать поле, к которому необходимо применить пользовательский десериализатор.

Класс Java, который использует аннотацию @JsonDeserialize:

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

0 голосов
/ 17 декабря 2018

Это может удовлетворить ваши потребности.Прочитать все содержимое файла в строке, затем:

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

Тогда все строки в указанном формате будут удалены из строки

Этот код не проверяет действительность даты (например, 2018-20-20 ...), но, вероятно, вам не нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...