我想知道我是否可以改变获取JSON对象的方式。
现在我正在使用,
JSONObject d = jsonarray.getJSONObject(Integer.parseInt(xyz)-1);
String id = d.getString(TAG_ID);
uid.setText(id);
我现在正在从我的数据库中解析jsonobject
的方式如下,用户输入一个id,我的jsonparser查找此id,除了我想要id为字符串而不是一个整数。由于它搜索的值具有不规则和特殊的符号。它需要能够解析的数字是Code-39符号/格式。它将与条形码扫描结合使用..
由于getJSONObject(int)
在int中呈现,我想知道你们是否知道我改变getjsonobject的类型的方法..或者另一种方式..因为它现在解析的方式我只能使用常规号码..
编辑代码
}
private class JSONParse extends AsyncTask<String, String, JSONObject> {
private ProgressDialog pDialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(DisplayMessageActivity.this);
pDialog.setMessage("Getting Data ...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
@Override
protected JSONObject doInBackground(String... args) {
JSONParser jParser = new JSONParser();
// Getting JSON from URL
JSONObject json = jParser.getJSONFromUrl(url);
return json;
}
@Override
protected void onPostExecute(JSONObject json) {
pDialog.dismiss();
String xyz = edt.getText().toString();
try { // Getting JSON Array
user = json.getJSONObject(TAG_TAG);
JSONObject c = user.getJSONObject(xyz);
String id = c.getString(TAG_ID);
String fname = c.getString(TAG_FIRST_NAME);
String lname = c.getString(TAG_LAST_NAME);
String email = c.getString(TAG_EMAIL);
String ipa = c.getString(TAG_IP);
String country = c.getString(TAG_COUNTRY);
//Set JSON Data in TextView
uid.setText(id);
name1.setText(fname);
name2.setText(lname);
email1.setText(email);
ipaddres.setText(ipa);
cou.setText(country);
public class JSONParser {
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
// constructor
public JSONParser() {
}
public JSONObject getJSONFromUrl(String url) {
// Making HTTP request
try {
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
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 JSON String
return jObj;
}
}
答案 0 :(得分:0)
您必须使用int的原因是您正在使用JSONArray
。根据定义,它使用从零开始的增量int作为索引。要获取具有特定属性(例如“id”)的项,您必须首先解析整个数组,然后遍历这些值,直到找到具有所需id属性的对象。
您可以将每个项目设为正常JSONObject
,而不是使用数组,如下所示:
{
"items": {
"-1": {},
"+1": {},
"00": {}
}
}
这样,每个项目都是items对象的属性,可以使用其字符串id:
进行访问JSONObject items = json.getJSONObject("items");
JSONObject myItem = items.getJSONObject(xyz);