使用 JsonReader
Working with JsonReader
我正在开发 android 应读取此 json 字符串的应用程序:
{
"coord":{
"lon":145.77,
"lat":-16.92
},
"weather":[
{
"id":803,
"main":"Clouds",
"description":"broken clouds",
"icon":"04n"
}
],
"base":"cmc stations"
}
与此类似。
我可以使用以下方法成功读取 "coord"
值:
public Coordinates readCoordinates(JsonReader reader) throws IOException{
double longitude = 0.0; // lon
double latitude = 0.0; // lat
reader.beginObject();
while (reader.hasNext()){
String nameToRead = reader.nextName();
if(nameToRead.equals("lon")){
longitude = reader.nextDouble();
}else if (nameToRead.equals("lat")){
latitude = reader.nextDouble();
}else {
reader.skipValue();
}
}
reader.endObject();
return (new Coordinates(longitude, latitude));
}
我有类似的阅读方法 "weather"
:
public Weather readWeather(JsonReader reader) throws IOException{
int id = 0;
String main = "";
String description = "";
String icon = "";
reader.beginObject();
while (reader.hasNext()){
String nameToRead = reader.nextName();
if(nameToRead.equals("id")){
id = reader.nextInt();
}else if (nameToRead.equals("main")){
main = reader.nextString();
}else if (nameToRead.equals("description")){
description = reader.nextString();
}else if (nameToRead.equals("icon")){
icon = reader.nextString();
}else{
reader.skipValue();
}
}
reader.endObject();
return (new Weather(id, main, description, icon));
}
我不断收到此异常消息Expected BEGIN_OBJECT but was BEGIN_ARRAY
如果我将 reader.beginObject()
更改为 reader.beginArray()
,我会得到同样的错误。我也尝试过完全删除它,但出现了同样的错误。
我假设这是由于 [
的引入引起的,但我不确定如何解决这个问题。如果有人知道请帮忙,我将不胜感激,谢谢。
在您的 gson
模型中 class 看看。根据 json
"weather":[
{
"id":803,
"main":"Clouds",
"description":"broken clouds",
"icon":"04n"
}
]
它应该被解析为 jsonArray
但我认为在你的模型中 class 你期望它是 jsonObject
.
根据 json 使用 http://www.jsonschema2pojo.org/ 获得精确的 java 模型 class。
您没有得到 JSON 的结构。在 "weather" 之后是只有一个对象的数组。所以你的代码应该是
jsonReader.beginArray();
while( jsonReader.hasNext() ) {
jsonReader.beginObject();
while( jsonReader.hasNext() ) {
String nameToRead = reader.nextName();
if(nameToRead.equals("id")){
id = reader.nextInt();
}else if (nameToRead.equals("main")){
main = reader.nextString();
}else if (nameToRead.equals("description")){
description = reader.nextString();
}else if (nameToRead.equals("icon")){
icon = reader.nextString();
else {
jsonReader.skipValue();
}
我正在开发 android 应读取此 json 字符串的应用程序:
{
"coord":{
"lon":145.77,
"lat":-16.92
},
"weather":[
{
"id":803,
"main":"Clouds",
"description":"broken clouds",
"icon":"04n"
}
],
"base":"cmc stations"
}
与此类似。
我可以使用以下方法成功读取 "coord"
值:
public Coordinates readCoordinates(JsonReader reader) throws IOException{
double longitude = 0.0; // lon
double latitude = 0.0; // lat
reader.beginObject();
while (reader.hasNext()){
String nameToRead = reader.nextName();
if(nameToRead.equals("lon")){
longitude = reader.nextDouble();
}else if (nameToRead.equals("lat")){
latitude = reader.nextDouble();
}else {
reader.skipValue();
}
}
reader.endObject();
return (new Coordinates(longitude, latitude));
}
我有类似的阅读方法 "weather"
:
public Weather readWeather(JsonReader reader) throws IOException{
int id = 0;
String main = "";
String description = "";
String icon = "";
reader.beginObject();
while (reader.hasNext()){
String nameToRead = reader.nextName();
if(nameToRead.equals("id")){
id = reader.nextInt();
}else if (nameToRead.equals("main")){
main = reader.nextString();
}else if (nameToRead.equals("description")){
description = reader.nextString();
}else if (nameToRead.equals("icon")){
icon = reader.nextString();
}else{
reader.skipValue();
}
}
reader.endObject();
return (new Weather(id, main, description, icon));
}
我不断收到此异常消息Expected BEGIN_OBJECT but was BEGIN_ARRAY
如果我将 reader.beginObject()
更改为 reader.beginArray()
,我会得到同样的错误。我也尝试过完全删除它,但出现了同样的错误。
我假设这是由于 [
的引入引起的,但我不确定如何解决这个问题。如果有人知道请帮忙,我将不胜感激,谢谢。
在您的 gson
模型中 class 看看。根据 json
"weather":[
{
"id":803,
"main":"Clouds",
"description":"broken clouds",
"icon":"04n"
}
]
它应该被解析为 jsonArray
但我认为在你的模型中 class 你期望它是 jsonObject
.
根据 json 使用 http://www.jsonschema2pojo.org/ 获得精确的 java 模型 class。
您没有得到 JSON 的结构。在 "weather" 之后是只有一个对象的数组。所以你的代码应该是
jsonReader.beginArray();
while( jsonReader.hasNext() ) {
jsonReader.beginObject();
while( jsonReader.hasNext() ) {
String nameToRead = reader.nextName();
if(nameToRead.equals("id")){
id = reader.nextInt();
}else if (nameToRead.equals("main")){
main = reader.nextString();
}else if (nameToRead.equals("description")){
description = reader.nextString();
}else if (nameToRead.equals("icon")){
icon = reader.nextString();
else {
jsonReader.skipValue();
}