验证Redis(Jedis)的密钥值是否为JSON

时间:2018-03-14 01:58:05

标签: java json database redis jedis

我正在尝试创建一个迭代Redis数据库的Java程序,以及关键值;如果它是一个有效的JSON,请提取到一个单独的模式中(尚未对此做任何事情);否则,什么都不做,但继续搜索其他键。

这是我的功能代码:

Jedis jedis = new Jedis("localhost");

    ScanResult<String> scanResult = jedis.scan("0");
    List<String> keys = scanResult.getResult();
    String nextCursor = scanResult.getStringCursor();
    JSONParser parser = new JSONParser();
    int counter = 0;

    while(true) {

        if(nextCursor.equals("0")) {
            break;
        }

        scanResult = jedis.scan(nextCursor);
        nextCursor = scanResult.getStringCursor();
        keys = scanResult.getResult();
        for(counter = 0; counter <= keys.size(); counter++) {
            try {
                JSONObject json = (JSONObject) parser.parse(keys.get(counter).toString());

            } catch (ParseException e) {
                e.printStackTrace();
            } 
        }
        System.out.println(keys = scanResult.getResult());
    }
    jedis.close();

我在使用JSON Parse时遇到麻烦(如果我正确使用他,则为idk)因为我认为我只获得了KEY NAMES(而不是他们的值)。 我尝试使用Map<String, String> = scanResult.getResult()代替List<String>,但它指出了Typemismatch问题。

似乎很容易解决,但我有点陷入困境......任何有用的提示都会受到欢迎,谢谢。

P.S。:我不能使用像ReJSON这样的模块,必须使用原生redis函数。

1 个答案:

答案 0 :(得分:0)

我想我明白了。回答我自己的问题:

public void readRedis() {
    Jedis jedis = new Jedis("localhost");

    ScanResult<String> scanResult = jedis.scan("0");
    String nextCursor = scanResult.getStringCursor();
    JSONParser parser = new JSONParser();
    int counter = 0;

    while (true) {
        nextCursor = scanResult.getStringCursor();
        List<String> keys = scanResult.getResult();
        for (counter = 0; counter < keys.size(); counter++) {
            if(counter == keys.size()) {
                break;
            }               
            try {
                JSONObject json = (JSONObject) parser.parse(jedis.rpop(keys.get(counter)));
                documentoJson(json);                    
                System.out.println("Added to function 'documentoJson'");

            } catch (ParseException e) {
                System.out.println("Not a valid JSON");
            }
        }
        if (nextCursor.equals("0")) {
            break;
        }
        scanResult = jedis.scan(nextCursor);
    }
    jedis.close();
}

public JSONArray documentoJson(JSONObject json) {
    JSONObject jObject = new JSONObject();
    JSONArray jArray = new JSONArray();
    jArray.add(json);
    jObject.put("JSON Document", jArray);
    return jArray;
 }