Преобразование данных String из таблицы MySQL в список JSON в Java - PullRequest
0 голосов
/ 17 июня 2019

Я хочу преобразовать строку в список json. В настоящее время я работаю над веб-API, используя Spring Boot Существует таблица, которая содержит несколько значений в одном столбце, и аналогично все столбцы имеют несколько значений. Нравится: есть автомобильная компания. Существует столбец с именем модели - который содержит более одной модели, а затем есть столбец цены, который содержит все цены моделей соответственно. Теперь я должен преобразовать эти строки в формат JSON.

Я попытался использовать split() в Java для этого, но это дает адрес расположение в качестве вывода.

Модель класса

..........//getters and setters and declarations

    @Override
    public String toString() {

        String ar = car_type;
        String ar1[]=ar.split(",");
        int l = ar1.length;
        return "{" +
                "\"car_comp\":" +"\"" + car_comp+ "\""+"," +
                "\"car_type\":" +"\""+ ar1 + "\""+","+
                "\"car_price\":" +"\""+ car_price+ "\""+","+
                "\"car_comp_value\":"+"\"" + car_comp_value +"\""+
                '}';
    }

Я использовал функцию длины, чтобы проверить, создается ли массив правильного размера или нет.

Выход

 "car_comp": {
        "car_comp": "bmw",
        "car_type": "[Ljava.lang.String;@4017b770",
        "car_price": "$1500",
        "car_comp_value": "$65.4M"
    }

ПОЖАЛУЙСТА, ИГНОРИРУЙТЕ ДАННЫЕ .. Но тип машины показывает не то, что я ожидал. Честно говоря, я впервые работаю в web api и json, и я не очень понимаю, как с этим справиться. Ожидаемый результат:

 "car_comp": {
        "car_comp": "bmw",
        "car_type": [{modelA},{modelB},{modelC}],
        "hb_unit_hints": "Kg",
        "hb_value": "65.4"
    }

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 17 июня 2019

String ar = car_type;

String ar1 [] = ar.split (",");

Я чувствую, что ваша проблема заключается в попытке сопоставить столбец String объекта таблицы с полем модели List. Если у вас была модель автомобиля с полем «Список», то преобразование модели в строку JSON выполняется напрямую, используя jackson-objectmapper , например:

Модель автомобиля:

public class Car {
    String car_comp;
    List<String> car_type;
    String car_price;
    String car_comp_value;
}

Преобразование объекта модели автомобиля в строку JSON:

ObjectMapper objectMapper = new ObjectMapper();

Car car = new Car();
car.car_comp = "BMW";
car.car_type = Arrays.asList("modelA", "modelB", "modelC");
car.car_price = "$1500";
car.car_comp_value = "$65.4M";

String json = objectMapper.writeValueAsString(car);

Если вы используете JPA Entity для сопоставления таблиц базы данных с моделями, вы можете использовать javax.persistence.AttributeConverter , чтобы преобразовать разделенный запятыми столбец String в поле List списка сущность, как:

Конвертер пользовательских атрибутов:

public class CarTypeConverter implements AttributeConverter<List<String>, String> {
    @Override
    public Long convertToDatabaseColumn(List<String> attribute) {
        if (attribute == null) return null;
        return attribute.stream().reduce((x, y) -> x + "," + y).orElse("");
    }

    @Override
    public List<String> convertToEntityAttribute(String dbColumnValue) {
        if (dbColumnValue == null) return null;
        String[] typeArray = dbColumnValue.split(",");
        List<String> typeList = Arrays.stream(typesArray).collect(Collectors.toList());
        return typeList;
    }
}

Объект базы данных автомобилей:

@Entity
@Table(name = "car_comp")
class Car {
    @Column(name = "car_comp")
    String car_comp;

    @Column(name = "car_type")
    @Convert(converter = CarTypeConverter.class)
    List<String> car_type;

    @Column(name = "car_price")
    String car_price;

    @Column(name = "car_value")
    String car_comp_value;
    //getters and setter below...
}
0 голосов
/ 17 июня 2019

Поскольку вы используете пружинную загрузку, вы можете реализовать это, используя ObjectMapper.

Так что я просто создам модель для ясного объяснения

Модель автомобиля

class Car {
    @JsonProperty(value = "car_company")
    private String carCompany;
    @JsonProperty(value = "car_type")
    private List<CarType> carType;
    @JsonProperty(value = "car_price")
    private String carPrice;

   // Getter, Setter, All Args
}

Тип автомобиля

class CarType {
    @JsonProperty(value = "type")
    private String type;

    //Getter, Setter, All Args
}

Осуществление

ObjectMapper mapper = new ObjectMapper();
List<CarType> carTypes = Arrays.asList(new CarType("SEDAN"), new CarType("HATCHBACK"));
Car car = new Car("Telsa", carTypes, "1000");
System.out.println(mapper.writeValueAsString(car));  

//Output : 
//{"car_company":"Telsa","car_type":[{"type":"SEDAN"},{"type":"HATCHBACK"}],"car_proce":"1000"}


JsonNode jsonNode = mapper.valueToTree(car);

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