- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 Android studio 和 Java 构建一个简单的天气预报应用程序。我按照此处的一些说明( https://www.androdocs.com/java/creating-an-android-weather-app-using-java.html )启动并运行,这有效。但是,我只能获取当前的天气。 Openweather 预报 API 调用似乎持续了 5 天。没问题,但如何获取用户指定的 future 5 天内的特定日期的天气(例如温度和风速)?
下面是一个示例 JSON 响应(缩短)。即使我可以在中午 12 点提取特定日期前后的信息,并获取该日期的温度和风速,也足够了。如何解析此 JSON 响应以获取特定日期的温度和风速?非常感谢...抱歉我是初学者...
{"cod":"200","message":0,"cnt":40,"list":[{"dt":1574283600,"main":{"temp":281.75,"temp_min":281.68,"temp_max":281.75,"pressure":995,"sea_level":995,"grnd_level":980,"humidity":93,"temp_kf":0.07},"weather":[{"id":501,"main":"Rain","description":"moderate rain","icon":"10n"}],"clouds":{"all":100},"wind":{"speed":4.82,"deg":147},"rain":{"3h":5.38},"sys":{"pod":"n"},"dt_txt":"2019-11-20 21:00:00"},{"dt":1574294400,"main":{"temp":281.79,"temp_min":281.74,"temp_max":281.79,"pressure":995,"sea_level":995,"grnd_level":980,"humidity":91,"temp_kf":0.05},"weather":[{"id":500,"main":"Rain","description":"light rain","icon":"10n"}],"clouds":{"all":100},"wind":{"speed":5.55,"deg":140},"rain":{"3h":1.75},"sys":{"pod":"n"},"dt_txt":"2019-11-21 00:00:00"},{"dt":1574305200,"main":{"temp":279.48,"temp_min":279.44,"temp_max":279.48,"pressure":994,"sea_level":994,"grnd_level":980,"humidity":95,"temp_kf":0.04},"weather":[{"id":500,"main":"Rain","description":"light rain","icon":"10n"}],"clouds":{"all":100},"wind":{"speed":2.37,"deg":155},"rain":{"3h":0.94},"sys":{"pod":"n"},"dt_txt":"2019-11-21 03:00:00"},{"dt":1574316000,"main":{"temp":278.56,"temp_min":278.54,"temp_max":278.56,"pressure":995,"sea_level":995,"grnd_level":980,"humidity":94,"temp_kf":0.02},"weather":[{"id":500,"main":"Rain","description":"light rain","icon":"10n"}],"clouds":{"all":100},"wind":{"speed":1.73,"deg":128},"rain":{"3h":0.06},"sys":{"pod":"n"},"dt_txt":"2019-11-21 06:00:00"},{"dt":1574326800,"main":{"temp":279.19,"temp_min":279.19,"temp_max":279.19,"pressure":995,"sea_level":995,"grnd_level":981,"humidity":95,"temp_kf":0},"weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04d"}],"clouds":{"all":100},"wind":{"speed":1.79,"deg":104},"sys":{"pod":"d"},"dt_txt":"2019-11-21 09:00:00"},{"dt":1574337600,"main":{"temp":282.2,"temp_min":282.2,"temp_max":282.2,"pressure":995,"sea_level":995,"grnd_level":980,"humidity":85,"temp_kf":0},"weather":[{"id":500,"main":"Rain","description":"light rain","icon":"10d"}],"clouds":{"all":100},"wind":{"speed":2.78,"deg":129},"rain":{"3h":0.19},"sys":{"pod":"d"},"dt_txt":"2019-11-21 12:00:00"}
最佳答案
这是一个使用 JSON-Simple 的示例应用程序用于解析从 OpenWeatherMap.org 下载的 JSON 数据的库。
package work.basil.example;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
public class Weather
{
public static void main ( String[] args )
{
Weather app = new Weather();
app.demo();
}
private void demo ( )
{
//Creating a JSONParser object
JSONParser jsonParser = new JSONParser();
try
{
// Download JSON.
String yourKey = "b6907d289e10d714a6e88b30761fae22";
URL url = new URL( "https://samples.openweathermap.org/data/2.5/forecast/hourly?zip=79843&appid=b6907d289e10d714a6e88b30761fae22" + yourKey ); // 79843 = US postal Zip Code for Marfa, Texas.
URLConnection conn = url.openConnection();
BufferedReader reader = new BufferedReader( new InputStreamReader( conn.getInputStream() ) );
// Parse JSON
JSONObject jsonObject = ( JSONObject ) jsonParser.parse( reader );
System.out.println( "jsonObject = " + jsonObject );
JSONArray list = ( JSONArray ) jsonObject.get( "list" );
System.out.println( "list = " + list );
// Loop through each item
for ( Object o : list )
{
JSONObject forecast = ( JSONObject ) o;
Long dt = ( Long ) forecast.get( "dt" ); // Parse text into a number of whole seconds.
Instant instant = Instant.ofEpochSecond( dt ); // Parse the count of whole seconds since 1970-01-01T00:00Z into a `Instant` object, representing a moment in UTC with a resolution of nanoseconds.
ZoneId z = ZoneId.of( "America/Chicago" ); // Specify a time zone using a real `Continent/Region` time zone name. Never use 2-4 letter pseudo-zones such as `PDT`, `CST`, `IST`, etc.
ZonedDateTime zdt = instant.atZone( z ); // Adjust from a moment in UTC to the wall-clock used by the people of a particular region (a time zone). Same moment, same point on the timeline, different wall-clock time.
LocalTime lt = zdt.toLocalTime() ;
// … compare with lt.equals( LocalTime.NOON ) to find the data sample you desire.
System.out.println( "dt : " + dt );
System.out.println( "instant : " + instant );
System.out.println( "zdt : " + zdt );
JSONObject main = ( JSONObject ) forecast.get( "main" );
System.out.println( "main = " + main );
Double temp = ( Double ) main.get( "temp" ); // Better to use BigDecimal instead of Double for accuracy. But I do not know how to get the JSON-Simple library to parse the original string input as a BigDecimal.
System.out.println( "temp = " + temp );
JSONObject wind = ( JSONObject ) forecast.get( "wind" );
System.out.println( "wind = " + wind );
System.out.println( "BASIL - wind.getCLass: " + wind.getClass() );
Double speed = ( Double ) wind.get( "speed" );
System.out.println( "speed = " + speed );
System.out.println( "\n" );
}
}
catch ( FileNotFoundException e )
{
e.printStackTrace();
}
catch ( IOException e )
{
e.printStackTrace();
}
catch ( ParseException e )
{
e.printStackTrace();
}
}
}
请注意,当遇到缺少小数点分隔符的风速数据点时,此代码会崩溃。例如,为了保持一致性,该数据的发布者应该编写 1.0
而不是 1
。如果他们这样做了,库就会将 1.0
解析为 Double
,而不是将 1
解析为 Long
。
此代码还使用 JSON-Simple 的原始版本 1,现已失效。该项目被 fork ,产生了截然不同的版本 2 和 3。
查看此页Parsing decimal numbers, some of which lack a decimal separator, in JSON data using JSON-Simple (Java)有关解析十进制问题的详细信息以及有关 forked project 的链接.
因此,虽然我不推荐将此代码用于生产用途,但它可能会对您有所帮助。对于实际工作,请考虑 JSON-Simple 的更高版本 3 或任何其他可用于 Java 的 JSON 处理库。
请参阅 this URL 处的示例数据。为了使其可读,请使用文本编辑器或 IDE重新格式化 JSON 数据。
示例输出:
dt : 1553709600
instant : 2019-03-27T18:00:00Z
zdt : 2019-03-27T13:00-05:00[America/Chicago]
main = {"temp":286.44,"temp_min":286.258,"grnd_level":1002.193,"temp_kf":0.18,"humidity":100,"pressure":1015.82,"sea_level":1015.82,"temp_max":286.44}
temp = 286.44
wind = {"deg":202.816,"speed":5.51}
speed = 5.51
dt : 1553713200
instant : 2019-03-27T19:00:00Z
zdt : 2019-03-27T14:00-05:00[America/Chicago]
main = {"temp":286.43,"temp_min":286.3,"grnd_level":1002.667,"temp_kf":0.13,"humidity":100,"pressure":1016.183,"sea_level":1016.183,"temp_max":286.43}
temp = 286.43
wind = {"deg":206.141,"speed":4.84}
speed = 4.84
关于java - 使用 Openweather API 获取特定日期的天气 - 解析 JSON 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58962911/
我正在尝试检查 Entry 中是否存在重复项,并使用内联消息提醒用户该数字存在。 $(document).ready(function(){ $("#con1").blur(function(
我有一个基于类的 View 。我在引导模式上使用 Ajax。为了避免页面刷新,我想使用此类基于 View 返回 JSON 响应而不是 HTTP 响应,但我只看到了如何为基于函数的 View 返回 JS
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我有一个大型内部企业基于 Web 的应用程序在 IIS6 上运行 ASP.NET 3.5,生成 401 个“未经授权”响应,然后是 200 个“Ok”响应(如 Fiddler 所述)。我知道为什么会发
感谢您研究我的问题。 我有一个node/express服务器,配置了一个server.js文件,它调用urls.js,而urls.js又调用 Controller 来处理http请求,所有这些都配置相
当我使用以下命令时,我得到正确的 JSON 响应: $ curl --data "regno=&dob=&mobile=" https://vitacademics-rel.herokuapp.co
我有一个非常简单的 RESTful 服务,它通过 POST 接收一些表单数据,其目的是在云存储(Amazon S3、Azure Blob 存储等)中简单地保留文本主体(具有唯一 ID)作为一个文件..
UDP 不发送任何 ack,但它会发送任何响应吗? 我已经设置了客户端服务器UDP程序。如果我让客户端向不存在的服务器发送数据,那么客户端会收到任何响应吗? 我的假设是; 客户端 --> 广播服务器地
我有一个电梯项目,其中 有一个扩展 RestHelper 的类,看起来像这样 serve{ "api" / "mystuff" prefix { case a
我们正在寻求覆盖 Kong 错误响应结构并编写自定义消息(即用我们的自定义消息替换“超出 API 速率限制”、“无效的身份验证凭据”等)。 我们要找的错误响应结构(代码是自定义的内部错误代码,与HTT
我正在尝试监听 EKEventStoreChangedNotification 以检查当我的应用程序处于后台时日历是否已更改。 我在 View Controller 的 initWithNibMeth
我了解 javascript,并且正在学习 ASP.NET C# 我想要做什么(完成的是javascript): document.getElementById('divID-1'
是否可以过滤所有 har 对象并仅获取 POST 请求/响应?也许在初始化 BrowserMobProxyServer 期间是这样做的方法?我需要将 har 对象保存到文件中并上传到 har 查看器。
我正在尝试向 Oauth 的 API 发送响应。遗憾的是,Symfony2 文档在解释 $response->headers->set(...); 的所有不同部分方面做得很差。 这是我的 OauthC
我正在尝试测试用例来模拟 api 调用,并使用 python 响应来模拟 api 调用。 下面是我的模拟, with responses.RequestsMock() as rsps: url
在尝试在 Haskell 中进行一些领域驱动设计时,我发现自己遇到了这个问题: data FetchAccessories = FetchAccessories data AccessoriesRes
我正在与 ANT+ USB 棒连接,并用项目 react 器替换我自己天真的“MessageBus”,因为它看起来非常合适。 USB接口(interface)本质上是异步的(单独的输入/输出管道),我
我正在将项目迁移到AFNetworking 2.0。使用AFNetworking 1.0时,我编写了代码来记录控制台中的每个请求/响应。这是代码: -(AFHTTPRequestOperation *
我有以下代码段。 ajaxRequest.onreadystatechange = function(){ if(ajaxRequest.readyState == 4){
我有问题......我在 php 中有一个监听器脚本可以执行以下操作: if ($count != 1) {echo 'no';} else { echo "yes";} 因此它会回显"is"或“
我是一名优秀的程序员,十分优秀!