Как разобрать символ «:» в строке Json

Я хочу разобрать строку json в JSONObject, но символ «:», кажется, анализирует ошибку

Например -> "time": "2019-05-28T16:30:29Z" будет неправильно

Но изменено на "time": "20190526" все в порядке

Это весь объект json:

{
    "channel": 922875000,
    "sf": 12,
    "time": "2019-05-28T16:30:29Z",
    "gwip": "192.168.0.180",
    "gwid": "00001c497b431ff5",
    "repeater": "00000000ffffffff",
    "systype": 170,
    "rssi": -103,
    "snr": 20.5,
    "snr_max": 33,
    "snr_min": 18,
    "macAddr": "00000000aabb60ba",
    "data": "00000000",
    "frameCnt": 8,
    "fport": 3
}

и код разбора:

    try {
        JSONObject sensorObject = new JSONObject(message.toString());
        SensorModel sensorModel = new Gson().fromJson(sensorObject.toString(), SensorModel.class);
    } catch (JSONException e) {
        logger.error(e.getMessage());
    }

Как я могу позволить ему сохранить тот же "2019:05:26" контент?

ДатчикМодель:

@Entity
public class SensorModel {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;

@NotNull
private long channel;

@NotNull
private int sf;

@NotNull
private String time;

@NotNull
private String gwip;

@NotNull
private String gwid;


private String repeater;


private int systype;


private double rssi;


private double snr;


private double snr_max;


private double snr_min;


private String macAddr;


private String data;


private int frameCnt;


private int fport;

public void setId(long id) {
    this.id = id;
}

public void setChannel(long channel) {
    this.channel = channel;
}

public void setSf(int sf) {
    this.sf = sf;
}

public void setTime(String time) {
    this.time = time;
}

public void setGwip(String gwip) {
    this.gwip = gwip;
}

public void setGwid(String gwid) {
    this.gwid = gwid;
}

public void setRepeater(String repeater) {
    this.repeater = repeater;
}

public void setSystype(int systype) {
    this.systype = systype;
}

public void setRssi(double rssi) {
    this.rssi = rssi;
}

public void setSnr(double snr) {
    this.snr = snr;
}

public void setSnr_max(double snr_max) {
    this.snr_max = snr_max;
}

public void setSnr_min(double snr_min) {
    this.snr_min = snr_min;
}

public void setMacAddr(String macAddr) {
    this.macAddr = macAddr;
}

public void setData(String data) {
    this.data = data;
}

public void setFrameCnt(int frameCnt) {
    this.frameCnt = frameCnt;
}

public void setFport(int fport) {
    this.fport = fport;
}

public long getId() {
    return id;
}

public long getChannel() {
    return channel;
}

public int getSf() {
    return sf;
}

public String getTime() {
    return time;
}

public String getGwip() {
    return gwip;
}

public String getGwid() {
    return gwid;
}

public String getRepeater() {
    return repeater;
}

public int getSystype() {
    return systype;
}

public double getRssi() {
    return rssi;
}

public double getSnr() {
    return snr;
}

public double getSnr_max() {
    return snr_max;
}

public double getSnr_min() {
    return snr_min;
}

public String getMacAddr() {
    return macAddr;
}

public String getData() {
    return data;
}

public int getFrameCnt() {
    return frameCnt;
}

public int getFport() {
    return fport;
}
}

какую строку вы пытаетесь разобрать? "2019:05:26"?

lealceldeiro 28.05.2019 18:26

данные датчика от брокера MQTT

Shawn Plus 28.05.2019 18:26

Пожалуйста, опубликуйте точную строку (минимально необходимый фрагмент кода), которую вы хотите проанализировать, чтобы помочь вам лучше. "time": "2019:05:26" не кажется допустимым json.

lealceldeiro 28.05.2019 18:27

Какой библиотекой вы парсите?

Roddy of the Frozen Peas 28.05.2019 18:32

я отредактировал это в своем посте

Shawn Plus 28.05.2019 18:32

Пожалуйста, покажи свой SensorModel класс

Héctor 28.05.2019 18:33

Пожалуйста, объясните разницу между вашим фактическим вводом "time": "2019-05-28T16:30:29Z" и тем, что вы требовать считаете своим вводом "time": "2019:05:26"

Bohemian 28.05.2019 18:37

Я обновил пост.

Shawn Plus 28.05.2019 18:44

JSONObject и GSON — это две разные библиотеки JSON. Почему вы используете оба? Должно быть и то, и другое?...

RobOhRob 28.05.2019 18:53

Кажется, у меня нет проблем с анализом вашей входной строки в JSONObject (org.json). Возможно, попробуйте сформулировать свою проблему по-другому, чтобы мы лучше ее поняли.

Harshal Parekh 28.05.2019 19:03
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
10
656
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

используйте ObjectMapper следующим образом:

import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Date;

public class JSONObject {
    private int channel;
    private int sf;
    private Date time;
    private String gwip;
    private String gwid;
    private String repeater;
    private int systype;
    private int rssi;
    private double snr;
    private double snr_min;
    private double snr_max;
    private String macAddr;
    private String data;
    private int frameCnt;
    private int fport;

    public int getChannel() {
        return channel;
    }

    public void setChannel(int channel) {
        this.channel = channel;
    }

    public int getSf() {
        return sf;
    }

    public void setSf(int sf) {
        this.sf = sf;
    }

    public Date getTime() {
        return time;
    }

    public void setTime(Date time) {
        this.time = time;
    }

    public String getGwip() {
        return gwip;
    }

    public void setGwip(String gwip) {
        this.gwip = gwip;
    }

    public String getGwid() {
        return gwid;
    }

    public void setGwid(String gwid) {
        this.gwid = gwid;
    }

    public String getRepeater() {
        return repeater;
    }

    public void setRepeater(String repeater) {
        this.repeater = repeater;
    }

    public int getSystype() {
        return systype;
    }

    public void setSystype(int systype) {
        this.systype = systype;
    }

    public int getRssi() {
        return rssi;
    }

    public void setRssi(int rssi) {
        this.rssi = rssi;
    }

    public double getSnr() {
        return snr;
    }

    public void setSnr(double snr) {
        this.snr = snr;
    }

    public double getSnr_min() {
        return snr_min;
    }

    public void setSnr_min(double snr_min) {
        this.snr_min = snr_min;
    }

    public double getSnr_max() {
        return snr_max;
    }

    public void setSnr_max(double snr_max) {
        this.snr_max = snr_max;
    }

    public String getMacAddr() {
        return macAddr;
    }

    public void setMacAddr(String macAddr) {
        this.macAddr = macAddr;
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }

    public int getFrameCnt() {
        return frameCnt;
    }

    public void setFrameCnt(int frameCnt) {
        this.frameCnt = frameCnt;
    }

    public int getFport() {
        return fport;
    }

    public void setFport(int fport) {
        this.fport = fport;
    }

    @Override
    public String toString() {
        return "JSONObject{" + "channel = " + channel + ", sf = " + sf + ", time = " + time + ", gwip = " + gwip + ", gwid = " + gwid + ", repeater = " + repeater + ", systype = " + systype + ", rssi = " + rssi + ", snr = " + snr + ", snr_min = " + snr_min + ", snr_max = " + snr_max + ", macAddr = " + macAddr + ", data = " + data + ", frameCnt = " + frameCnt + ", fport = " + fport + '}';
    }

    public static void main(String[] args) throws Exception {
        String json = "{\"channel\":922875000,\"sf\":12,\"time\":\"2019-05-28T16:30:29Z\",\"gwip\":\"192.168.0.180\",\"gwid\":\"00001c497b431ff5\",\"repeater\":\"00000000ffffffff\",\"systype\":170,\"rssi\":-103,\"snr\":20.5,\"snr_max\":33,\"snr_min\":18,\"macAddr\":\"00000000aabb60ba\",\"data\":\"00000000\",\"frameCnt\":8,\"fport\":3}";
        ObjectMapper objectMapper = new ObjectMapper();
        JSONObject obj = objectMapper.readValue(json, JSONObject.class);
        System.out.println(obj.toString());
    }
}

Другие вопросы по теме