有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

springboot rest api(postgresql)中的java搜索JSONObject

我想根据存储在数据库中的一些JSON数据执行搜索操作,该数据库具有以下格式:

   {   
     "id": "ae002e48-f540-44ac-9050-3bd24902a",
     "type": "Devil",
     "System": "not your system",
     "dateCreated": "2012-12-12T15:22:53.798",
     "meta":{
             "key":123,
             "life": "get a life",
             "animal":"not dirty"
            },
     "item": null
 }

那么,我如何在postgresql数据库中搜索所有JSON以查找关键元数据呢。所有动物都“不脏”的动物

附言:我想在get请求期间执行搜索(如get请求到/animal/search/meta/animal?animal=not+dirty应该搜索所有记录并显示所有带有meta.animal=not dirty的记录)


共 (2) 个答案

  1. # 1 楼答案

    我假设这个JSON存储在特定的1列中

    1. 在java中创建一个类似的VObean文件

       public class DatabaseJson{
               private Object item;
               private String dateCreated;
               private Meta meta;
               private String id;
               private String type;
               private String system;
           // generate getters settrers as well
           }
      

    你的元类会是这样的

    public class Meta{
            private String animal;
            private int key;
            private String life;
        // generate getters settrers as well
        }
    
    1. 在代码中获取这个json数据,数据类型可能是String

      列表<;String jsonList=fetchAllJsonFromDatabase()

    //现在可以将其转换为vo对象(使用fasterxml)

    DatabaseJson DatabaseJson=convertStringtoElement(inputString,DatabaseJson.class)

    现在您可以从databaseJson中检查特定值(在您的情况下,它是动物)

    public static <T> T convertStringtoElement(String jsonString, Class<T> conversionClass)
        {
            T eee = null;
            try {
                com.fasterxml.jackson.databind.ObjectMapper objectMapper = new com.fasterxml.jackson.databind.ObjectMapper();
                objectMapper.addMixIn(JAXBElement.class, JAXBElementMixIn.class);
                if(StringUtils.isNotEmpty(jsonString)){
                    com.fasterxml.jackson.databind.JsonNode jsonNode = objectMapper.readTree(jsonString);
                    eee = objectMapper.treeToValue(jsonNode, conversionClass);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return eee;
        }
    
  2. # 2 楼答案

    PostgreSQL从9.2版开始就支持原生JSON数据类型,因此我假设您的数据库表列是“JSON”类型。如果是这种情况,一种方法是引导http get请求执行SQL查询,如下所示:

    SELECT
        your_column_name ->> 'id' AS id
    FROM
        your_table_name
    WHERE
        your_column_name -> 'meta' ->> 'animal' = 'not dirty'
    

    您可能需要检查thisthis