私はかなり新しいJavaです。私はこのカップルの時間のための答えを探してみましたが、今のところ私は何も持っていません。Gson矛盾したjsonからの不正な状態の例外
私はノーベル賞のAPIと協力しています.Jsonストリームからクラスに変換しようとするとエラーが発生します。ストリームを読み込むための
私のコードはこれです:
Gson gson = new Gson();
String sURL = "http://api.nobelprize.orgv1/laureate.json?bornCountry=Canada"; //just a string
// Connect to the URL using java's native library
URL url = new URL(sURL);
HttpURLConnection request = (HttpURLConnection) url.openConnection();
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(); //May be an array, may be an object.
LaureatesMain person = gson.fromJson(rootobj, LaureatesMain.class);
System.out.println(person);
}
私はまだストリームからエラーをチェックしていないのです。
私が探していますJSONストリームは次のようなものになります。私は、受賞者、賞および所属のクラスを持っており、それは上記のようなJSON上で実行したときに、私は何の問題を持っていないし、それが行く
{
"laureates": [
{
"id": "140",
// MORE STUFF
"prizes": [
{
"year": "1990",
// MORE STUFF
"affiliations": [
{
"name": "Stanford University",
"city": "Stanford, CA",
"country": "USA"
}
]
}
]
}
]
}
をクラスの罰金に。
次が所属にエントリがAPIを{} []に切り替え、何らかの理由で、その後はありませんし、私を与えた場合、私はに実行して問題がある:
私はこの1つ上で実行{
"laureates": [
{
"id": "140",
// MORE STUFF
"prizes": [
{
"year": "1990",
// MORE STUFF
"affiliations": [[]
]
}
]
}
]
}
私はExpected BEGIN_OBJECT
を取得するが、私はGsonBuilder
を変更見てみましたとJSONを傍受し、それがBuilder
に入る前に、それを変更しようとしましたが、今のところ何ものために働いていないしているパス
$.laureates[###].prizes[0].affiliations[0]
でBEGIN_ARRAY
ました私。
私はAPIから何を得るかについては何の支配もしていません。私はそれが空のクラスオブジェクトであるか、最終構造体のヌル値であることに対処できます。これはプロジェクトのかなり初期の反復ですが、今のところこの問題は私が他のものに移行するのを止めています。
ありがとうございました
= gson.fromJson(rootobj、LaureatesMain.class) ; 'サーバーからのデータ形式を制御できない場合。 – JakeWilson801
このポストと同様の問題のようです:[REST結果(json)のJavaでの不整合なデータ型の処理](http://stackoverflow.com/questions/38714747/handling-inconsistent-data-types-in-rest-results) -json-in-java)。 ['TypeAdapter'](https://google.github.io/gson/apidocs/com/google/gson/TypeAdapter.html)を使用してみましたか? – avojak
あなたが直接コントロールすることはできませんが、私はAPIプロバイダにバグレポートを提出します。 – dnault