Разобрать не Json строку в POJO - PullRequest
0 голосов
/ 06 мая 2020

Мне нужно извлечь детали из строки необработанных журналов и преобразовать их в POJO. Поскольку это журналы, на самом деле они не в формате JSON.

например.

{
    CONTAINER_ID = some_value,
    TRACKING_ID = value,
    PHYSICAL_ATTRIBUTES = PhysicalAttributes(length = Dimension(value = 30.0, unit = CM, type = null), width = Dimension(value = 30.0, unit = CM, type = null), height = Dimension(value = 30.0, unit = CM, type = null), scaleWeight = Weight(value = 5.0, unit = kg, type = null)),
    SHIP_METHOD = some_value,
    ADDRESS_ID = some_value,
    CUSTOMER_ID = some_value,
    REQUEST_STATE = UNKNOWN,
    REQUEST_STATE_REASON = UNKNOWN,
    RESPONSE = GetAccessPointsForHubDeliveryOutput(destinationLocation = null, fallBackLocation = null, capability = null),
    IS_COMMERCIAL_ATTRIBUTE_PRESENT = false
}

Есть ли способ преобразовать эту строку в POJO? (Обязательные объекты - столичные)

1 Ответ

0 голосов
/ 06 мая 2020

Есть ли способ преобразовать эту строку в POJO?

Да, вы можете написать парсер, который будет читать данные и сохранять их в соответствующий объект. Один из способов сделать это - преобразовать данные в формат JSON и воспользоваться существующим синтаксическим анализом JSON для преобразования полученного JSON в POJO.

Вот пример класса POJO на основе ваши данные. Примечание. Я сделал простое преобразование ваших данных в JSON и запустил его с помощью онлайн-инструмента генерации кода, чтобы этот класс не соответствовал Java Соглашениям по кодам .

public class PojoClass {
    private String CONTAINER_ID;

    private String TRACKING_ID;

    private String PHYSICAL_ATTRIBUTES;

    private String SHIP_METHOD;

    private String ADDRESS_ID;

    private String CUSTOMER_ID;

    private String REQUEST_STATE;

    private String REQUEST_STATE_REASON;

    private String RESPONSE;

    private String IS_COMMERCIAL_ATTRIBUTE_PRESENT;

    public void setCONTAINER_ID(String CONTAINER_ID) {
        this.CONTAINER_ID = CONTAINER_ID;
    }

    public String getCONTAINER_ID() {
        return this.CONTAINER_ID;
    }

    public void setTRACKING_ID(String TRACKING_ID) {
        this.TRACKING_ID = TRACKING_ID;
    }

    public String getTRACKING_ID() {
        return this.TRACKING_ID;
    }

    public void setPHYSICAL_ATTRIBUTES(String PHYSICAL_ATTRIBUTES) {
        this.PHYSICAL_ATTRIBUTES = PHYSICAL_ATTRIBUTES;
    }

    public String getPHYSICAL_ATTRIBUTES() {
        return this.PHYSICAL_ATTRIBUTES;
    }

    public void setSHIP_METHOD(String SHIP_METHOD) {
        this.SHIP_METHOD = SHIP_METHOD;
    }

    public String getSHIP_METHOD() {
        return this.SHIP_METHOD;
    }

    public void setADDRESS_ID(String ADDRESS_ID) {
        this.ADDRESS_ID = ADDRESS_ID;
    }

    public String getADDRESS_ID() {
        return this.ADDRESS_ID;
    }

    public void setCUSTOMER_ID(String CUSTOMER_ID) {
        this.CUSTOMER_ID = CUSTOMER_ID;
    }

    public String getCUSTOMER_ID() {
        return this.CUSTOMER_ID;
    }

    public void setREQUEST_STATE(String REQUEST_STATE) {
        this.REQUEST_STATE = REQUEST_STATE;
    }

    public String getREQUEST_STATE() {
        return this.REQUEST_STATE;
    }

    public void setREQUEST_STATE_REASON(String REQUEST_STATE_REASON) {
        this.REQUEST_STATE_REASON = REQUEST_STATE_REASON;
    }

    public String getREQUEST_STATE_REASON() {
        return this.REQUEST_STATE_REASON;
    }

    public void setRESPONSE(String RESPONSE) {
        this.RESPONSE = RESPONSE;
    }

    public String getRESPONSE() {
        return this.RESPONSE;
    }

    public void setIS_COMMERCIAL_ATTRIBUTE_PRESENT(String IS_COMMERCIAL_ATTRIBUTE_PRESENT) {
        this.IS_COMMERCIAL_ATTRIBUTE_PRESENT = IS_COMMERCIAL_ATTRIBUTE_PRESENT;
    }

    public String getIS_COMMERCIAL_ATTRIBUTE_PRESENT() {
        return this.IS_COMMERCIAL_ATTRIBUTE_PRESENT;
    }

    @Override
    public String toString() {
        return "PojoClass [CONTAINER_ID=" + CONTAINER_ID + ", TRACKING_ID=" + TRACKING_ID + ", PHYSICAL_ATTRIBUTES="
                + PHYSICAL_ATTRIBUTES + ", SHIP_METHOD=" + SHIP_METHOD + ", ADDRESS_ID=" + ADDRESS_ID + ", CUSTOMER_ID="
                + CUSTOMER_ID + ", REQUEST_STATE=" + REQUEST_STATE + ", REQUEST_STATE_REASON=" + REQUEST_STATE_REASON
                + ", RESPONSE=" + RESPONSE + ", IS_COMMERCIAL_ATTRIBUTE_PRESENT=" + IS_COMMERCIAL_ATTRIBUTE_PRESENT
                + "]";
    }
}

I сохранил ваши образцы данных в простом текстовом файле, а затем написал следующий код для чтения и преобразования его в JSON, а затем в POJO с помощью Gson:

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;

import com.google.gson.Gson;

public class GsonMain {

    public static void main(String[] args) throws IOException {
        Gson gson = new Gson();
        List<String> lines = Files.readAllLines(Paths.get("src/test/resources/input.txt"));

        StringBuilder builder = new StringBuilder();
        for(String line: lines){
            line = line.trim();
            if("{".equals(line) || 
                "}".equals(line)){
                builder.append(line);
                continue;
            }

            line = line.replaceFirst(" = ", "\" : \"");
            line = line.replaceAll("^", "\"");
            line = line.replaceAll(",$", "\",");

            if(!line.endsWith(",")){
                line = line + "\"";
            }

            builder.append(line);
        }
        System.out.println("JSON --> " + builder.toString());

        PojoClass pojo = gson.fromJson(builder.toString(), PojoClass.class);
        System.out.println("POJO --> " + pojo);
    }

}

Вот пример вывода:

JSON --> {"CONTAINER_ID" : "some_value","TRACKING_ID" : "value","PHYSICAL_ATTRIBUTES" : "PhysicalAttributes(length = Dimension(value = 30.0, unit = CM, type = null), width = Dimension(value = 30.0, unit = CM, type = null), height = Dimension(value = 30.0, unit = CM, type = null), scaleWeight = Weight(value = 5.0, unit = kg, type = null))","SHIP_METHOD" : "some_value","ADDRESS_ID" : "some_value","CUSTOMER_ID" : "some_value","REQUEST_STATE" : "UNKNOWN","REQUEST_STATE_REASON" : "UNKNOWN","RESPONSE" : "GetAccessPointsForHubDeliveryOutput(destinationLocation = null, fallBackLocation = null, capability = null)","IS_COMMERCIAL_ATTRIBUTE_PRESENT" : "false"}
POJO --> PojoClass [CONTAINER_ID=some_value, TRACKING_ID=value, PHYSICAL_ATTRIBUTES=PhysicalAttributes(length = Dimension(value = 30.0, unit = CM, type = null), width = Dimension(value = 30.0, unit = CM, type = null), height = Dimension(value = 30.0, unit = CM, type = null), scaleWeight = Weight(value = 5.0, unit = kg, type = null)), SHIP_METHOD=some_value, ADDRESS_ID=some_value, CUSTOMER_ID=some_value, REQUEST_STATE=UNKNOWN, REQUEST_STATE_REASON=UNKNOWN, RESPONSE=GetAccessPointsForHubDeliveryOutput(destinationLocation = null, fallBackLocation = null, capability = null), IS_COMMERCIAL_ATTRIBUTE_PRESENT=false]
...