java - Java - 访问 JSON 元素 (llegalFormatConversionException: d !=java.lang.String)
问题描述
我正在尝试学习 JAVA 并为 Minecraft 构建一个插件;我已经成功地从我的 api 端点获取 JSON 数据,但是,我现在面临的问题是 llegalFormatConversionException: d !=java.lang.String 这意味着我试图将其转换为字符串的格式不是等于它正在寻找的字符串类型。
我正在尝试从名为条件的端点访问 JSON 元素
{
"todaysdate": "2021-02-12",
"temperature": 25,
"description": [
"Overcast"
],
"condition": 122,
}
来自 C#;我知道有一个名为 json2sharp 的网站,您可以在其中为 JSON 创建一个根类。我不确定它将如何在 Java 中应用,但目前,我的代码看起来像这样。
private String fetchWeather() throws IOException, InvalidConfigurationException {
// Download
final URL url = new URL(API);
final URLConnection request = url.openConnection();
// Set HEADER
request.setRequestProperty("x-api-key", plugin.apiKey);
request.setConnectTimeout(5000);
request.setReadTimeout(5000);
request.connect();
// Convert to a JSON object to print data
JsonParser jp = new JsonParser(); //from gson
JsonElement root = jp.parse(new InputStreamReader((InputStream) request.getContent())); //Convert the input stream to a json element
JsonObject rootobj = root.getAsJsonObject();
//JsonElement code = rootobj.get("condition");
String condition_code = rootobj.get("condition").toString();
plugin.getLogger().fine(String.format(
"[%s] Weather is %d",
world.getName(), condition_code
));
return condition_code;
}
如果我打电话
private JsonObject fetchWeather() throws IOException, InvalidConfigurationException {
// Download
final URL url = new URL(API);
final URLConnection request = url.openConnection();
// Set HEADER
request.setRequestProperty("x-api-key", plugin.apiKey);
request.setConnectTimeout(5000);
request.setReadTimeout(5000);
request.connect();
// Convert to a JSON object to print data
JsonParser jp = new JsonParser(); //from gson
JsonElement root = jp.parse(new InputStreamReader((InputStream) request.getContent())); //Convert the input stream to a json element
JsonObject rootobj = root.getAsJsonObject();
return rootobj;
}
state = fetchWeather();
plugin.getLogger().warning(state.toString());
我确实得到了包含所有元素的实际 JSON,所以我知道 URL 并且访问它是完全有效的,但是如果我尝试使用记录器调用和打印条件代码,我会收到格式错误。
因此,如果我将 fetchWeather() 中的返回类型更改为根 json 对象,然后尝试使用上面的状态变量打印它就可以了;但是如果我尝试返回条件 json 元素并打印它,它会给我一个非法异常。
现在,在我发布这个问题之前,我确实阅读了人们提出的其他一些问题,但我无法从他们建议的答案中获得有效的解决方案。所以,我希望有人能指出我做错了什么,因为我知道我在变量格式的某个地方搞砸了。
谢谢。
Line 37: state = fetchWeather();
Line 103:
plugin.getLogger().fine(String.format(
"[%s] Weather is %d",
world.getName(), bId
));
解决方案
condition_code 变量是字符串。您应该使用 %s 格式说明符。
推荐阅读
- php - 使用 GD 库进行验证码,图像未显示
- javascript - 将 JavaScript 类导入另一个类时出现意外标识符 {classname}
- c# - C#中float和double的执行逻辑
- python - PyCharm 找不到 Spacy 模型“en”
- javascript - 将EventListener添加到chrome扩展中的所有iframe
- android - 缺少主调度程序的模块
- javascript - 在 JavaScript 中将 Base64 类型转换为字符串
- java - 既然 twitter 禁用了用户/站点流,您如何使用 Twitter4J 收听新的直接消息
- java - OkHttp 不重用 HTTPS/HTTP2 连接
- java - 任务:将 csv、xml 文件导入新的 Schema。显示报告。JAVA