반응형
HTTP 응답에서 JSON 개체 가져 오기
JSON
Http 응답에서 개체 를 얻고 싶습니다 .
다음은 Http get에 대한 현재 코드입니다.
protected String doInBackground(String... params) {
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet(params[0]);
HttpResponse response;
String result = null;
try {
response = client.execute(request);
HttpEntity entity = response.getEntity();
if (entity != null) {
// A Simple JSON Response Read
InputStream instream = entity.getContent();
result = convertStreamToString(instream);
// now you have the string representation of the HTML request
System.out.println("RESPONSE: " + result);
instream.close();
if (response.getStatusLine().getStatusCode() == 200) {
netState.setLogginDone(true);
}
}
// Headers
org.apache.http.Header[] headers = response.getAllHeaders();
for (int i = 0; i < headers.length; i++) {
System.out.println(headers[i]);
}
} catch (ClientProtocolException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
return result;
}
다음은 convertSteamToString 함수입니다.
private static String convertStreamToString(InputStream is) {
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}
지금은 문자열 객체를 얻고 있습니다. JSON 객체를 어떻게 되 찾을 수 있습니까?
얻는 문자열은 JSON Object.toString ()입니다. 이는 JSON 객체를 얻지 만 문자열 형식임을 의미합니다.
JSON 객체를 얻으려면 다음을 입력하면됩니다.
JSONObject myObject = new JSONObject(result);
JSON을 얻으려면 이렇게하십시오.
String json = EntityUtils.toString(response.getEntity());
자세한 내용은 여기 : HttpResponse에서 json 가져 오기
정확한 JSON 출력을 보지 않으면 작동하는 코드를 제공하기가 어렵습니다. 이 튜토리얼은 매우 유용하지만 다음과 같은 내용을 사용할 수 있습니다.
JSONObject jsonObj = new JSONObject("yourJsonString");
그런 다음 다음을 사용하여이 json 객체에서 검색 할 수 있습니다.
String value = jsonObj.getString("yourKey");
질문에 대한 정확한 답은 아니지만 도움이 될 수 있습니다.
public class JsonParser {
private static DefaultHttpClient httpClient = ConnectionManager.getClient();
public static List<Club> getNearestClubs(double lat, double lon) {
// YOUR URL GOES HERE
String getUrl = Constants.BASE_URL + String.format("getClosestClubs?lat=%f&lon=%f", lat, lon);
List<Club> ret = new ArrayList<Club>();
HttpResponse response = null;
HttpGet getMethod = new HttpGet(getUrl);
try {
response = httpClient.execute(getMethod);
// CONVERT RESPONSE TO STRING
String result = EntityUtils.toString(response.getEntity());
// CONVERT RESPONSE STRING TO JSON ARRAY
JSONArray ja = new JSONArray(result);
// ITERATE THROUGH AND RETRIEVE CLUB FIELDS
int n = ja.length();
for (int i = 0; i < n; i++) {
// GET INDIVIDUAL JSON OBJECT FROM JSON ARRAY
JSONObject jo = ja.getJSONObject(i);
// RETRIEVE EACH JSON OBJECT'S FIELDS
long id = jo.getLong("id");
String name = jo.getString("name");
String address = jo.getString("address");
String country = jo.getString("country");
String zip = jo.getString("zip");
double clat = jo.getDouble("lat");
double clon = jo.getDouble("lon");
String url = jo.getString("url");
String number = jo.getString("number");
// CONVERT DATA FIELDS TO CLUB OBJECT
Club c = new Club(id, name, address, country, zip, clat, clon, url, number);
ret.add(c);
}
} catch (Exception e) {
e.printStackTrace();
}
// RETURN LIST OF CLUBS
return ret;
}
}
Again, it’s relatively straight forward, but the methods I’ll make special note of are:
JSONArray ja = new JSONArray(result);
JSONObject jo = ja.getJSONObject(i);
long id = jo.getLong("id");
String name = jo.getString("name");
double clat = jo.getDouble("lat");
You need to use JSONObject
like below:
String mJsonString = downloadFileFromInternet(urls[0]);
JSONObject jObject = null;
try {
jObject = new JSONObject(mJsonString);
}
catch (JSONException e) {
e.printStackTrace();
return false;
}
...
private String downloadFileFromInternet(String url)
{
if(url == null /*|| url.isEmpty() == true*/)
new IllegalArgumentException("url is empty/null");
StringBuilder sb = new StringBuilder();
InputStream inStream = null;
try
{
url = urlEncode(url);
URL link = new URL(url);
inStream = link.openStream();
int i;
int total = 0;
byte[] buffer = new byte[8 * 1024];
while((i=inStream.read(buffer)) != -1)
{
if(total >= (1024 * 1024))
{
return "";
}
total += i;
sb.append(new String(buffer,0,i));
}
}
catch(Exception e )
{
e.printStackTrace();
return null;
}catch(OutOfMemoryError e)
{
e.printStackTrace();
return null;
}
return sb.toString();
}
private String urlEncode(String url)
{
if(url == null /*|| url.isEmpty() == true*/)
return null;
url = url.replace("[","");
url = url.replace("]","");
url = url.replaceAll(" ","%20");
return url;
}
Hope this helps you..
There is a JSONObject constructor to turn a String into a JSONObject:
http://developer.android.com/reference/org/json/JSONObject.html#JSONObject(java.lang.String)
참고URL : https://stackoverflow.com/questions/18073849/get-a-json-object-from-a-http-response
반응형
'programing tip' 카테고리의 다른 글
.travis.yml에서 Travis의 빌드 작업 디렉토리를 어떻게 얻습니까? (0) | 2020.11.25 |
---|---|
Bootstrap, Twitter Bootstrap 및 Bootstrap 3의 차이점은 무엇입니까? (0) | 2020.11.25 |
ALL_BUILD 및 ZERO_CHECK는 무엇이며 필요합니까? (0) | 2020.11.25 |
app.config에서 사용자 지정 TraceListener를 정의하는 방법 (0) | 2020.11.25 |
MSVC -Wall의 표준 헤더에있는 수천 개의 경고는 무엇입니까? (0) | 2020.11.25 |