Получить jsonArray Использование собственного диспетчера запросов - PullRequest
0 голосов
/ 18 мая 2018

У меня есть класс обслуживания, как показано ниже:

public class RulesService {
    @PersistenceContext
    private EntityManager em;

    public  JSONArray getReportingTableData(String Query) {
        List<Object> list = em.createNativeQuery(Query).getResultList();

        return /*convert the above list as json array**/;
    }
}

Итак, если запрос «выберите col1 как имя, col2 как agefrom table1», тогда мой jsonArray должен быть

[{"name":"test","age":"24"},{"name":"test1","age":"26"}]

Я не хочу использовать Pojo или класс сущностей здесь, потому что запрос будет изменяться динамически, и здесь будет много таблиц, поэтому я не хочу создавать отдельный класс Java для каждой таблицы.пытаясь сделать это как JSONArray.

Может кто-нибудь, пожалуйста, дайте мне правильное решение сделать это.

Ответы [ 3 ]

0 голосов
/ 18 мая 2018

вы можете использовать ObjectMapper для динамического выполнения.

public  JSONArray getReportingTableData(String Query) {
    List<Object> list = em.createNativeQuery(Query).getResultList();
    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.enable(SerializationFeature.INDENT_OUTPUT);
    String arrayToJson = objectMapper.writeValueAsString(list);
    JSONArray array = new JSONArray(arrayToJson);

    return /*convert the above list as json array**/;
}
0 голосов
/ 18 мая 2018

Полагаю, ты хочешь поступить как нижеВаш результат запроса - список массивов.[["test","24"],["test2","26"]], и вы хотите преобразовать его в key-value

List<Map<String,String>> result = listOfarray.stream()
                          .map(arr->{
                              Map<String,String> map = new HashMap<>();  
                              map.put("name",arr[0]); 
                              map.put("age",arr[1]); 
                              return map; 
                            })
                         .collect(Collectors.toList());
0 голосов
/ 18 мая 2018

Вы можете сделать это с помощью ObjectMapper Джексона.Этот учебник очень интересен.

List<Object> list = em.createNativeQuery(Query).getResultList();
final ByteArrayOutputStream out = new ByteArrayOutputStream();
final ObjectMapper mapper = new ObjectMapper();

mapper.writeValue(out, list);

final byte[] data = out.toByteArray();
System.out.println(new String(data));
...