質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

8632閲覧

JavaでWebAPIを叩いて値を取り出したい

hiddenb35

総合スコア11

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

1グッド

1クリップ

投稿2016/08/11 07:35

###実現したいこと
JSONICを使ってWeatherHacksのお天気WebサービスからJSONを取得して値を取り出したいのですがエラーが起きてしまいます。どうすればうまく動くでしょうか。何卒よろしくお願いいたします。

###発生している問題・エラーメッセージ

12日は、曇り時々晴れの見込みです。, publicTime=2016-08-11T10:44:00+0900}} は class sample.WeatherJson に変換できませんでした: $.forecasts at net.arnx.jsonic.JSON$Context.convertInternal(JSON.java:1775) at net.arnx.jsonic.JSON.parse(JSON.java:1155) at net.arnx.jsonic.JSON.parse(JSON.java:1130) at sample.Weather.main(Weather.java:63) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) Caused by: java.lang.UnsupportedOperationException: Cannot convert class java.util.ArrayList to class sample.Forecasts at net.arnx.jsonic.ObjectConverter.convert(Converter.java:1655) at net.arnx.jsonic.JSON.postparse(JSON.java:1310) at net.arnx.jsonic.JSON$Context.postparseInternal(JSON.java:1754) at net.arnx.jsonic.ObjectConverter.convert(Converter.java:1650) at net.arnx.jsonic.JSON.postparse(JSON.java:1310) at net.arnx.jsonic.JSON$Context.convertInternal(JSON.java:1762) ... 8 more

###コード
main

URL url = new URL("http://weather.livedoor.com/forecast/webservice/json/v1?city=130010"); System.err.println(url.toString()); HttpURLConnection urlconn = (HttpURLConnection) url.openConnection(); urlconn.setRequestMethod("GET"); urlconn.setInstanceFollowRedirects(false); urlconn.connect(); BufferedReader reader = new BufferedReader(new InputStreamReader(urlconn.getInputStream())); StringBuffer responseBuffer = new StringBuffer(); while (true) { String line = reader.readLine(); System.out.println(line); if (line == null) { break; } responseBuffer.append(line); } reader.close(); urlconn.disconnect(); String response = responseBuffer.toString(); WeatherJson weather = JSON.decode(response,WeatherJson.class);

WeatherJson.java

public class WeatherJson { private Location location; private String title; private String link; private String publicTime; private Description description; private Forecasts forecasts; private PinpointLocation pinpointLocation; private Copyright copyright; public void setLocation(Location location) { this.location = location; } public Location getLocation() { return location; } public void setTitle(String title) { this.title = title; } public String getTitle() { return title; } public void setLink(String link) { this.link = link; } public String getLink() { return link; } public void setPublicTime(String publicTime) { this.publicTime = publicTime; } public String getPublicTime() { return publicTime; } public void setDescription(Description description) { this.description = description; } public Description getDescription() { return description; } public void setForecasts(Forecasts forecasts) { this.forecasts = forecasts; } public Forecasts getForecasts() { return forecasts; } public void setPinpointLocation(PinpointLocation pinpointLocation) { this.pinpointLocation = pinpointLocation; } public PinpointLocation getPinpointLocation() { return pinpointLocation; } public void setCopyright(Copyright copyright) { this.copyright = copyright; } public Copyright getCopyright() { return copyright; } }

Location.java

public class Location { private String area; private String pref; private String city; public void setArea(String area) { this.area = area; } public String getArea() { return area; } public void setPref(String pref) { this.pref = pref; } public String getPref() { return pref; } public void setCity(String city) { this.city = city; } public String getCity() { return city; } }

Description.java

public class Description { private String text; private String publicTime; public void setText(String text) { this.text = text; } public String getText() { return text; } public void setPublicTime(String publicTime) { this.publicTime = publicTime; } public String getPublicTime() { return publicTime; } }

Forecasts.java

public class Forecasts { private String date; private String dateLabel; private String telop; private Image image; private Temperature temperature; public void setDate(String date) { this.date = date; } public String getDate() { return date; } public void setDateLabel(String dateLabel) { this.dateLabel = dateLabel; } public String getDateLabel() { return dateLabel; } public void setTelop(String telop) { this.telop = telop; } public String getTelop() { return telop; } public void setImage(Image image) { this.image = image; } public Image getImage() { return image; } public void setTemperature(Temperature temperature) { this.temperature = temperature; } public Temperature getTemperature() { return temperature; } }

Image.java

public class Image { private String title; private String link; private String url; private int width; private int height; public void setTitle(String title) { this.title = title; } public String getTitle() { return title; } public void setLink(String link) { this.link = link; } public String getLink() { return link; } public void setUrl(String url) { this.url = url; } public String getUrl() { return url; } public void setWidth(int width) { this.width = width; } public int getWidth() { return width; } public void setHeight(int height) { this.height = height; } public int getHeight() { return height; } }

Temperature.java

public class Temperature { private Min min; private Max max; public void setMin(Min min) { this.min = min; } public Min getMin() { return min; } public void setMax(Max max) { this.max = max; } public Max getMax() { return max; } }

PinpointLocation.java

public class PinpointLocation { private String name; private String link; public void setName(String name) { this.name = name; } public String getName() { return name; } public void setLink(String link) { this.link = link; } public String getLink() { return link; } }

Copyright.java

public class Copyright { private String title; private String link; private String image; private String provider; public void setTitle(String title) { this.title = title; } public String getTitle() { return title; } public void setLink(String link) { this.link = link; } public String getLink() { return link; } public void setImage(String image) { this.image = image; } public String getImage() { return image; } public void setProvider(String provider) { this.provider = provider; } public String getProvider() { return provider; } }
KiyoshiMotoki👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

at sample.Weather.main(Weather.java:63)

(中略)
Caused by: java.lang.UnsupportedOperationException: Cannot convert class java.util.ArrayList to class sample.Forecasts

ということから、

Weatherクラスの63行目で ArrayList 型のオブジェクトを Forecasts 型に "convert" しようとしたために UnsupportedOperationException が発生した

と、予想できます。

その部分のコードを確認してみてください。

投稿2016/08/11 07:48

KiyoshiMotoki

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hiddenb35

2016/08/11 07:59

ArrayList型にしたら無事動きました!ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問