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

Verifying if Key Values of Redis(Jedis) are JSON

我正在尝试制作一个 Java 程序来遍历 Redis 数据库,验证键值;如果它是有效的 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>,但它指出了类型不匹配问题。

看起来很容易解决,但我有点卡在这一点上......欢迎任何可以提供帮助的提示,谢谢。

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

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

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;
 }