Java - 访问 JSON 元素(llegalFormatConversionException:d !=java.lang.String)
Java - Access JSON Element (llegalFormatConversionException: d !=java.lang.String)
我正在尝试学习 JAVA 并为 Minecraft 构建一个插件;我已经成功地从我的 api 端点获取了 JSON 数据,但是,我现在面临的问题是 llegalFormatConversionException: d !=java.lang.String 这意味着我的格式尝试转换为字符串的类型不等于它要查找的字符串类型。
我正在尝试从名为 condition
的端点访问 JSON 元素
{
"todaysdate": "2021-02-12",
"temperature": 25,
"description": [
"Overcast"
],
"condition": 122,
}
来自C#;我知道有一个名为 json2sharp 的网站,您可以在其中为 JSON 创建根目录 class。我不确定如何在 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 并且访问它是完全有效的,但是如果我尝试调用和打印,我会得到一个 llegalexception for format使用记录器条件代码。
因此,如果我将 fetchWeather() 中的 return 类型更改为根 json 对象,然后尝试使用上面的状态变量打印它,它就可以工作;但是如果我尝试 return 条件 json 元素并打印它,它会给我一个非法的例外。
现在,在我发布这个问题之前,我确实阅读了人们提出的其他一些问题,但我无法从他们建议的答案中获得有效的解决方案。所以,我希望有人能指出我做错了什么,因为我知道我在可变格式的某个地方搞砸了。
谢谢。
Line 37: state = fetchWeather();
Line 103:
plugin.getLogger().fine(String.format(
"[%s] Weather is %d",
world.getName(), bId
));
condition_code 变量是字符串。您应该使用 %s 格式说明符。
我正在尝试学习 JAVA 并为 Minecraft 构建一个插件;我已经成功地从我的 api 端点获取了 JSON 数据,但是,我现在面临的问题是 llegalFormatConversionException: d !=java.lang.String 这意味着我的格式尝试转换为字符串的类型不等于它要查找的字符串类型。
我正在尝试从名为 condition
的端点访问 JSON 元素{
"todaysdate": "2021-02-12",
"temperature": 25,
"description": [
"Overcast"
],
"condition": 122,
}
来自C#;我知道有一个名为 json2sharp 的网站,您可以在其中为 JSON 创建根目录 class。我不确定如何在 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 并且访问它是完全有效的,但是如果我尝试调用和打印,我会得到一个 llegalexception for format使用记录器条件代码。
因此,如果我将 fetchWeather() 中的 return 类型更改为根 json 对象,然后尝试使用上面的状态变量打印它,它就可以工作;但是如果我尝试 return 条件 json 元素并打印它,它会给我一个非法的例外。
现在,在我发布这个问题之前,我确实阅读了人们提出的其他一些问题,但我无法从他们建议的答案中获得有效的解决方案。所以,我希望有人能指出我做错了什么,因为我知道我在可变格式的某个地方搞砸了。
谢谢。
Line 37: state = fetchWeather();
Line 103:
plugin.getLogger().fine(String.format(
"[%s] Weather is %d",
world.getName(), bId
));
condition_code 变量是字符串。您应该使用 %s 格式说明符。