我想从一个字符串创建json对象,该字符串来自我服务器中servlet的响应。
public class JSONParser {
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
// constructor
public JSONParser() {
}
public JSONObject getJSONFromUrl(String url,String a) {
ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>();
postParameters.add(new BasicNameValuePair("branchname", a));
try {
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);
httppost.setEntity(new UrlEncodedFormEntity(postParameters));
HttpResponse httpResponse = httpClient.execute(httppost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
json = sb.toString();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// try parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
return jObj;
}}
这是我的servlet ..
public class AvailabilityResponse extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out=response.getWriter();
String br_id;
br_id=request.getParameter("branchname");
try{
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:8888 /atmlivedetails","root","root");
Statement st=con.createStatement();
ResultSet rs=st.executeQuery("select atmbrno, atmbrname from location_stat where act_brname='"+br_id+"'");
int i=0;
JSONArray jArray = new JSONArray();
while(rs.next()){
String s = rs.getString("atmbrno");
String t = rs.getString("atmbrname");
JSONObject arrayObj = new JSONObject();
arrayObj.put("atmbrno",s);
arrayObj.put("atmbrname",t);
jArray.add(i,arrayObj);
i++;
}
rs.close ();
st.close ();
out.print(jArray);
}
catch(Exception e){
out.print(e);
}
}}
但是当我运行它时会显示错误
"parsing data org.json.JSONException: Value [{"atmbrname":"ANURADAPURA
[ATM 2]","atmbrno":"ATM084"},{"atmbrname":"MANNAR BRANCH
","atmbrno":"ATM344"}] of type org.json.JSONArray cannot be converted
to JSONObject"
这种情况有什么不对?
这是我的通话类
public class ListAtmActivity extends ListActivity{
private static String url ="http://10.0.2.2:8080/hello/AvailabilityResponse";
//TextView error;
//String brName;
//Bundle b = getIntent().getExtras();
//String brName = b.getString("key");
private static final String TAG_CONTACTS = "contacts";
private static final String TAG_ID = "id";
private static final String ATM_NO = "atmbrno";
private static final String ATM_PLACE = "atmbrname";
// contacts JSONArray
//JSONArray contacts = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list_item);
String brName=getIntent().getExtras().getString("key");
/*Bundle b = getIntent().getExtras();
brName = b.getString("key");
*/
// Hashmap for ListView
ArrayList<HashMap<String, String>> contactList = new ArrayList<HashMap<String, String>>();
// Creating JSON Parser instance
JSONParser jParser = new JSONParser();
// getting JSON string from URL
JSONObject json = jParser.getJSONFromUrl(url,brName);
try{
//String results;
JSONArray contacts = json.getJSONArray(TAG_CONTACTS);
for(int i = 0; i < contacts.length(); i++){
JSONObject json_data = contacts.getJSONObject(i);
// Storing each json item in variable
String atm_id = json_data.getString(ATM_NO);
String atm_name = json_data.getString(ATM_PLACE);
HashMap<String, String> map = new HashMap<String, String>();
map.put(ATM_NO, atm_id);
map.put(ATM_PLACE, atm_name);
contactList.add(map);
}
}
catch(JSONException e) {
e.printStackTrace();
}
/**
* Updating parsed JSON data into ListView
* */
ListAdapter adapter = new SimpleAdapter(this, contactList,
R.layout.list_main,
new String[] { ATM_NO, ATM_PLACE }, new int[] {
R.id.name , R.id.email });
setListAdapter(adapter);
}}
答案 0 :(得分:1)
您可以将json对象更改为json数组,
public class JSONParser {
static InputStream is = null;
static JSONArray jObj = null;
static String json = "";
// constructor
public JSONParser() {
}
public JSONArray getJSONFromUrl(String url,String a) {
ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>();
postParameters.add(new BasicNameValuePair("branchname", a));
try {
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);
httppost.setEntity(new UrlEncodedFormEntity(postParameters));
HttpResponse httpResponse = httpClient.execute(httppost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
json = sb.toString();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// try parse the string to a JSON Array
try {
jObj = new JSONArray(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
return jObj;
}}
你的返回数据是json数组,但你转换了json对象,那只是异常提升。
static JSONArray jObj = null;
// try parse the string to a JSON Array
try {
jObj = new JSONArray(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
答案 1 :(得分:1)
根据您的要求发布
public class JSONParser {
static InputStream is = null;
static JSONArray jObj = null;
static String json = "";
// constructor
public JSONParser() {
}
public JSONArray getJSONFromUrl(String url,String a) {
ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>();
postParameters.add(new BasicNameValuePair("branchname", a));
try {
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);
httppost.setEntity(new UrlEncodedFormEntity(postParameters));
HttpResponse httpResponse = httpClient.execute(httppost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
json = sb.toString();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// try parse the string to a JSON object
try {
jObj = new JSONArray(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
return jObj;
}}
并在解析类
中 public class ListAtmActivity extends ListActivity{
private static String url ="http://10.0.2.2:8080/hello/AvailabilityResponse";
//TextView error;
//String brName;
//Bundle b = getIntent().getExtras();
//String brName = b.getString("key");
private static final String TAG_CONTACTS = "contacts";
private static final String TAG_ID = "id";
private static final String ATM_NO = "atmbrno";
static final String ATM_PLACE = "atmbrname";
// contacts JSONArray
//JSONArray contacts = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list_item);
String brName=getIntent().getExtras().getString("key");
/*Bundle b = getIntent().getExtras();
brName = b.getString("key");
*/
// Hashmap for ListView
ArrayList<HashMap<String, String>> contactList = new ArrayList<HashMap<String, String>>();
// Creating JSON Parser instance
JSONParser jParser = new JSONParser();
// getting JSON string from URL
JSONArray contacts = jParser.getJSONFromUrl(url,brName);
try{
//String results;
for(int i = 0; i < contacts.length(); i++){
JSONObject json_data = contacts.getJSONObject(i);
// Storing each json item in variable
String atm_id = json_data.getString(ATM_NO);
String atm_name = json_data.getString(ATM_PLACE);
HashMap<String, String> map = new HashMap<String, String>();
map.put(ATM_NO, atm_id);
map.put(ATM_PLACE, atm_name);
contactList.add(map);
}
}
catch(JSONException e) {
e.printStackTrace();
}
/**
* Updating parsed JSON data into ListView
* */
ListAdapter adapter = new SimpleAdapter(this, contactList,
R.layout.list_main,
new String[] { ATM_NO, ATM_PLACE }, new int[] {
R.id.name , R.id.email });
setListAdapter(adapter);
}}
答案 2 :(得分:0)
你需要JsonArray来解析获取String,基本上你在你的Response中得到了JsonArray。
JSONArray jObj = null;
// try parse the string to a JSON Array
try {
jObj = new JSONArray(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}