[英]How can i get precise data in precise json request with java
我最近开始开发一个 java discord 机器人,它可以使用一些 API 的 hypixel skyblock 游戏。 到目前为止,我已经完成了很多请求,但现在我只剩下一个了。 我想获取玩家的当前个人资料,为此使用 Skycrypt API。
Skycrypt API 的请求是这样的: https://sky.shiiyu.moe/api/v2/profile/[Name] 。 (名称是你在 hypixel skyblock 上的标志)
API 返回类似这样的内容: API 响应在每个配置文件上(像 d675 这样的随机数......)我得到几个重要的字段:字段我想在此处获取的键是“当前”。
当我尝试在 java 中执行此操作时,我被卡住了,因为我实际上需要 d6751... 键来执行此操作:
URL pseudo = new URL("https://sky.shiiyu.moe/api/v2/profile/CoopCarried");
BufferedReader in2 = new BufferedReader(new InputStreamReader(pseudo.openStream()));
StringBuilder response2 = new StringBuilder();
String inputLine2;
while ((inputLine2 = in2.readLine()) != null) {
response2.append(inputLine2);
}in2.close();
JSONObject json = new JSONObject(response2.toString());
Boolean test = json.getJSONObject("profiles").getJSONObject("d675...").getBoolean("current");
System.out.println(test);
这里的问题是播放器可以有多个配置文件,这意味着多个 d6751 密钥,如果我需要我的代码中有问题的密钥访问当前密钥,就会出现问题。 请记住,我正在为一个公会做这件事,我有将近 100 个人要处理,所以如果有人知道解决方案,那将对我有很大帮助。 如果您有一些可以帮助您的问题,我会在这里(顺便说一句,您可以在 minecraft 上使用我的名字尝试 API 请求,即:CoopCarried),在此先感谢您。
本质上,您想要做的是遍历“配置文件”JSON object 中的键。一种简单的方法是使用JSONObject
上的keySet()
方法。 我假设您使用的是org.json:json
,因为我在您的代码片段中看不到您的导入,但是如果您的JSONObject
class 没有keySet()
方法,您可能可以使用类似的方法。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import org.json.JSONObject;
public class MinecraftThing {
public static void main(String[] args) throws IOException {
URL pseudo = new URL("https://sky.shiiyu.moe/api/v2/profile/CoopCarried");
BufferedReader in2 = new BufferedReader(new InputStreamReader(pseudo.openStream()));
StringBuilder response2 = new StringBuilder();
String inputLine2;
while ((inputLine2 = in2.readLine()) != null) {
response2.append(inputLine2);
}
in2.close();
JSONObject json = new JSONObject(response2.toString());
for (final Object keyObject : json.getJSONObject("profiles").keySet()) {
final String key = keyObject.toString();
Boolean test = json.getJSONObject("profiles").getJSONObject(key).getBoolean("current");
System.out.println(key + ": " + test);
}
}
}
dfdb...: false
27d0...: false
d675...: false
2862...: false
6bb9...: true
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.