当我尝试解析JSON时,出现一个非常奇怪的错误。 有效地,该文件是非常简单和如下一个简单的对象组成:解析JSON时的问题
{
"registered":false,
"firstname":"xxx",
"name":"yyyy",
"email":"[email protected]",
"picture":"xxxxx.jpg",
"username":"xxxy"
}
为了解析该文件中,我使用下面的代码,它是由在Android SDK的例子启发:
public static boolean isRegistered(int nmb) {
boolean toReturn = true;
JsonReader reader = null;
try {
reader = new JsonReader(new InputStreamReader(new URL("xxx").openConnection().getInputStream()));
reader.beginObject();
while(reader.hasNext()) {
String name = reader.nextName();
Log.i("Next value", name);
switch (name) {
case "registered":
toReturn = reader.nextBoolean();
break;
case "firstname":
ProfileManager.getInstance().setFirstname(reader.nextString());
break;
case "name":
ProfileManager.getInstance().setName(reader.nextString());
break;
case "email":
break;
case "picture":
break;
case "username":
break;
}
}
reader.endObject();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return toReturn;
}
当我开始执行时,执行时会出现错误。
String name = reader.nextName();
该错误说,它期望一个名称,但它会得到一个STRING。可以肯定的是,我用nextString()替换nextName(),并且我得到了相反的错误:期望一个字符串,但是是NAME。我决定检查第一个值,这要感谢peek()方法,它清楚地表明第一个元素是一个NAME。所以我通过手动读取对象来尝试一个非常简单的事情,没有循环,它的工作原理。这怎么可能 ?此外,我必须修改哪些代码才能使此代码可行?
谢谢!
为什么不使用GSON提供? – mariozawa
不是答案。一个建议http://stackoverflow.com/a/18998203/3049065使用org.json库.. –
我会说你的'switch'(包括默认)的所有情况下添加适当的处理。当前的实现在遇到“电子邮件”后会期望抛出异常 –