我正在尝试创建一个迭代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函数。
答案 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;
}