[英]Issue when parsing JSON
当我尝试解析JSON时,我收到一个非常奇怪的错误。 实际上,文件非常简单,由一个简单的对象组成如下:
{
"registered":false,
"firstname":"xxx",
"name":"yyyy",
"email":"yyyy.xxx@gmail.com",
"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。 所以我尝试了一个非常简单的事情,手动读取对象,没有循环,它的工作原理。 这怎么可能 ? 此外,我需要修改什么才能使此代码可用?
谢谢 !
尝试使用android sdk提供的内置库
JSONObject obj = new JSONObject(jsonString);
boolean registered = obj.getBoolean("registered");
String firstname = obj.getString("firstname");
String name = obj.getString("name");
String email = obj.getString("email");
String picture = obj.getString("picture");
String username = obj.getString("username");
public String CallUR(String url, int method) {
BufferedReader bufferedReader = null;
String result = null;
HttpURLConnection httpURLConnection = null;
/* Take an URL Object*/
try {
URL url1 = new URL(url);
httpURLConnection = (HttpURLConnection) url1.openConnection();
httpURLConnection.setRequestMethod("GET");
httpURLConnection.setConnectTimeout(20000);
httpURLConnection.connect();
InputStream inputStream = httpURLConnection.getInputStream();
StringBuffer stringBuffer = new StringBuffer();
if (inputStream == null) {
return null;
}
bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String line = "";
while ((line = bufferedReader.readLine()) != null) {
stringBuffer.append(line + " ");
}
if (stringBuffer.length() == 0) {
return null;
}
/*Close Input Stream*/
if (inputStream != null)
inputStream.close();
result = stringBuffer.toString();
return result;
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (httpURLConnection != null)
httpURLConnection.disconnect();
if (bufferedReader != null)
try {
bufferedReader.close();
} catch (final Exception e) {
}
}
return result;
}
JSONObject jsonObject = new JSONObject(resultString);
String registeredValue= jsonObject .getString("registered");
String firstnameValue= jsonObject .getString("firstname");
String nameValue= jsonObject .getString("name");
String emailValue= jsonObject .getString("email");
String pictureValue= jsonObject .getString("picture");
String usernameValue= jsonObject .getString("username");
**If you using java then ,you can create one bean**
package com.example;
import java.util.HashMap;
import java.util.Map;
import javax.annotation.Generated;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
public class Example {
private Boolean registered;
private String firstname;
private String name;
private String email;
private String picture;
private String username;
/**
*
* @return
* The registered
*/
public Boolean getRegistered() {
return registered;
}
/**
*
* @param registered
* The registered
*/
public void setRegistered(Boolean registered) {
this.registered = registered;
}
/**
*
* @return
* The firstname
*/
public String getFirstname() {
return firstname;
}
/**
*
* @param firstname
* The firstname
*/
public void setFirstname(String firstname) {
this.firstname = firstname;
}
/**
*
* @return
* The name
*/
public String getName() {
return name;
}
/**
*
* @param name
* The name
*/
public void setName(String name) {
this.name = name;
}
/**
*
* @return
* The email
*/
public String getEmail() {
return email;
}
/**
*
* @param email
* The email
*/
public void setEmail(String email) {
this.email = email;
}
/**
*
* @return
* The picture
*/
public String getPicture() {
return picture;
}
/**
*
* @param picture
* The picture
*/
public void setPicture(String picture) {
this.picture = picture;
}
/**
*
* @return
* The username
*/
public String getUsername() {
return username;
}
/**
*
* @param username
* The username
*/
public void setUsername(String username) {
this.username = username;
}
}
**Then after in the function you can pass the bean,Easily you can break it.**
public void display(Example example){
String userName=example.getUsername();
...
...
}
likewise you can do complete.
If you don't want create the bean then you can directly use the JSON Object
JSONObject obj = new JSONObject(jsonString);
boolean registered = obj.getBoolean("registered");
String firstname = obj.getString("firstname");
String name = obj.getString("name");
String email = obj.getString("email");
String picture = obj.getString("picture");
String username = obj.getString("username");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.