JSONObject return 类型
JSONObject return type
Java 中的以下 android 应用程序代码输出到:
[{"handle":"DmitriyH","firstName":"Dmitriy","lastName":"Khodyrev","country":"Russia","city":"Moscow","organization":"KL","contribution":122,"rank":"master","rating":2040,"maxRank":"international master","maxRating":2072,"lastOnlineTimeSeconds":1432130513,"registrationTimeSeconds":1268570311}]}
从 codeforces 提取数据时 api- http://codeforces.com/api/user.info?handles=DmitriyH;
但我只想要 "firstName" 的用户。
任何人都可以建议更改我的代码吗??
public class Http extends Activity {
TextView httpStuff;
HttpClient client;
JSONObject json;
final static String URL = http://codeforces.com/api/user.info?handles=;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.httpex);
httpStuff = (TextView)findViewById(R.id.tvHttp);
client = new DefaultHttpClient();
new Read().execute("result");
}
public JSONObject lastSub(String username) throws ClientProtocolException, IOException, JSONException {
StringBuilder url = new StringBuilder(URL);
url.append(username);
HttpGet get = new HttpGet(url.toString());
HttpResponse r = client.execute(get);
//httpStuff.setText("xxx");
int status = r.getStatusLine().getStatusCode();
if(status == 200) {
HttpEntity e = r.getEntity();
String data = EntityUtils.toString(e);
JSONObject last = new JSONObject(data);
return last;
}
else {
Toast.makeText(Http.this, "error", Toast.LENGTH_SHORT);
return null;
}
}
public class Read extends AsyncTask <String, Integer, String> {
@Override
protected String doInBackground(String... arg0) {
// TODO Auto-generated method stub
try {
json = lastSub("avm12");
return json.getString(arg0[0]);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
httpStuff.setText(result);
}
}
}
您的完整 JSONObject
包含一个带有标签 "result"
的数组,因此您应该像这样提取 firstName:
JSONArray result = json.getJSONArray("result");
JSONObject jo = result.getJSONObject(0);
String firstName = jo.getString("firstName");
public JSONObject lastSub(String username) throws ClientProtocolException, IOException, JSONException {
StringBuilder url = new StringBuilder(URL);
url.append(username);
HttpGet get = new HttpGet(url.toString());
HttpResponse r = client.execute(get);
//httpStuff.setText("xxx");
int status = r.getStatusLine().getStatusCode();
if(status == 200) {
HttpEntity e = r.getEntity();
String data = EntityUtils.toString(e);
JSONObject last = new JSONObject(data).getJSONArray("result").getJSONObject(0);
return last;
}
else {
Toast.makeText(Http.this, "error", Toast.LENGTH_SHORT);
return null;
}
}
编辑
Now suppose I am using the url "codeforces.com/api/user.status?handle=avm12"; and I want to extract the first ten( or say n number of them) "problem" tags. What should I do then?
那么先搞定根JSONArray
JSONArray array= new JSONObject(data).getJSONArray("result");
然后在 for 循环中获取所有需要的 JSONObjects
for(int k=0;k<n;k++){ // n must be less than array.length()
JSONObject problemObject=array.getJSONObject(k).getJSONObject("problem");
//do what you need to do with the problemObject E.G. Add them to an ArryList...
}
考虑将 &count=N
添加到您的 url 以将输出限制为所需的 N 个结果...
您的第一个标签是 JSONArray
,因此您需要使用 return JSONArray
而不是 JSONObject
创建一个方法。根据您的要求,您可以通过
jArray.getJSONObject(0).get("firstName");
在您发布的代码中,您没有使用正确的 URL。
以下作品:
final static String URL = http://codeforces.com/api/user.info?handles=;
...
protected String doInBackground(String... arg0) {
// TODO Auto-generated method stub
try {
json = lastSub("DmitriyH");
final JSONArray result = json.getJSONArray("result");
final JSONObject jsonObject = result.getJSONObject(0);
return jsonObject.getString("firstName");
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
....
Java 中的以下 android 应用程序代码输出到:
[{"handle":"DmitriyH","firstName":"Dmitriy","lastName":"Khodyrev","country":"Russia","city":"Moscow","organization":"KL","contribution":122,"rank":"master","rating":2040,"maxRank":"international master","maxRating":2072,"lastOnlineTimeSeconds":1432130513,"registrationTimeSeconds":1268570311}]}
从 codeforces 提取数据时 api- http://codeforces.com/api/user.info?handles=DmitriyH;
但我只想要 "firstName" 的用户。 任何人都可以建议更改我的代码吗??
public class Http extends Activity {
TextView httpStuff;
HttpClient client;
JSONObject json;
final static String URL = http://codeforces.com/api/user.info?handles=;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.httpex);
httpStuff = (TextView)findViewById(R.id.tvHttp);
client = new DefaultHttpClient();
new Read().execute("result");
}
public JSONObject lastSub(String username) throws ClientProtocolException, IOException, JSONException {
StringBuilder url = new StringBuilder(URL);
url.append(username);
HttpGet get = new HttpGet(url.toString());
HttpResponse r = client.execute(get);
//httpStuff.setText("xxx");
int status = r.getStatusLine().getStatusCode();
if(status == 200) {
HttpEntity e = r.getEntity();
String data = EntityUtils.toString(e);
JSONObject last = new JSONObject(data);
return last;
}
else {
Toast.makeText(Http.this, "error", Toast.LENGTH_SHORT);
return null;
}
}
public class Read extends AsyncTask <String, Integer, String> {
@Override
protected String doInBackground(String... arg0) {
// TODO Auto-generated method stub
try {
json = lastSub("avm12");
return json.getString(arg0[0]);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
httpStuff.setText(result);
}
}
}
您的完整 JSONObject
包含一个带有标签 "result"
的数组,因此您应该像这样提取 firstName:
JSONArray result = json.getJSONArray("result");
JSONObject jo = result.getJSONObject(0);
String firstName = jo.getString("firstName");
public JSONObject lastSub(String username) throws ClientProtocolException, IOException, JSONException {
StringBuilder url = new StringBuilder(URL);
url.append(username);
HttpGet get = new HttpGet(url.toString());
HttpResponse r = client.execute(get);
//httpStuff.setText("xxx");
int status = r.getStatusLine().getStatusCode();
if(status == 200) {
HttpEntity e = r.getEntity();
String data = EntityUtils.toString(e);
JSONObject last = new JSONObject(data).getJSONArray("result").getJSONObject(0);
return last;
}
else {
Toast.makeText(Http.this, "error", Toast.LENGTH_SHORT);
return null;
}
}
编辑
Now suppose I am using the url "codeforces.com/api/user.status?handle=avm12"; and I want to extract the first ten( or say n number of them) "problem" tags. What should I do then?
那么先搞定根JSONArray
JSONArray array= new JSONObject(data).getJSONArray("result");
然后在 for 循环中获取所有需要的 JSONObjects
for(int k=0;k<n;k++){ // n must be less than array.length()
JSONObject problemObject=array.getJSONObject(k).getJSONObject("problem");
//do what you need to do with the problemObject E.G. Add them to an ArryList...
}
考虑将 &count=N
添加到您的 url 以将输出限制为所需的 N 个结果...
您的第一个标签是 JSONArray
,因此您需要使用 return JSONArray
而不是 JSONObject
创建一个方法。根据您的要求,您可以通过
jArray.getJSONObject(0).get("firstName");
在您发布的代码中,您没有使用正确的 URL。 以下作品:
final static String URL = http://codeforces.com/api/user.info?handles=;
...
protected String doInBackground(String... arg0) {
// TODO Auto-generated method stub
try {
json = lastSub("DmitriyH");
final JSONArray result = json.getJSONArray("result");
final JSONObject jsonObject = result.getJSONObject(0);
return jsonObject.getString("firstName");
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
....