자바의 URL에서 JSON을 읽는 가장 간단한 방법
이 바보 같은 질문이 될 수도 있지만 읽고 분석하는 가장 간단한 방법은 무엇입니까 JSON을 에서 URL 에 자바는 ?
Groovy에서는 몇 줄의 코드 만 필요합니다. 내가 찾은 Java 예제는 엄청나게 길다 (그리고 예외 처리 블록이 크다).
내가하고 싶은 것은 이 링크 의 내용을 읽는 것 입니다.
Maven 인공물을 사용하여 org.json:json
다음 코드를 얻었습니다. 가능한 짧지는 않지만 여전히 사용할 수 있습니다.
package so4308554;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.URL;
import java.nio.charset.Charset;
import org.json.JSONException;
import org.json.JSONObject;
public class JsonReader {
private static String readAll(Reader rd) throws IOException {
StringBuilder sb = new StringBuilder();
int cp;
while ((cp = rd.read()) != -1) {
sb.append((char) cp);
}
return sb.toString();
}
public static JSONObject readJsonFromUrl(String url) throws IOException, JSONException {
InputStream is = new URL(url).openStream();
try {
BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
String jsonText = readAll(rd);
JSONObject json = new JSONObject(jsonText);
return json;
} finally {
is.close();
}
}
public static void main(String[] args) throws IOException, JSONException {
JSONObject json = readJsonFromUrl("https://graph.facebook.com/19292868552");
System.out.println(json.toString());
System.out.println(json.get("id"));
}
}
Jackson 과 함께 사용하는 몇 가지 대안 버전은 다음과 같습니다 (데이터를 원하는 여러 가지 방법이 있으므로).
ObjectMapper mapper = new ObjectMapper(); // just need one
// Got a Java class that data maps to nicely? If so:
FacebookGraph graph = mapper.readValue(url, FaceBookGraph.class);
// Or: if no class (and don't need one), just map to Map.class:
Map<String,Object> map = mapper.readValue(url, Map.class);
특히 Java 객체를 처리하려는 일반적인 (IMO) 사례는 하나의 라이너로 만들 수 있습니다.
FacebookGraph graph = new ObjectMapper().readValue(url, FaceBookGraph.class);
Gson과 같은 다른 라이브러리도 한 줄 방법을 지원합니다. 더 많은 섹션이 더 긴 섹션이 이상한 이유는 무엇입니까? 더 나쁜 것은 많은 예제가 더 이상 사용되지 않는 org.json 라이브러리를 사용한다는 것입니다. 그것은 첫 번째 일 이었을지 모르지만 더 좋은 대안이 6 개이므로 그것을 사용할 이유가 거의 없습니다.
가장 쉬운 방법 : Google 자체 goto json 라이브러리 인 gson을 사용하십시오. https://code.google.com/p/google-gson/
다음은 샘플입니다. 이 무료 위치 정보 웹 사이트로 이동하여 json을 구문 분석하고 우편 번호를 표시합니다. (이것들을 테스트하기 위해 주요 방법으로 넣으십시오)
String sURL = "http://freegeoip.net/json/"; //just a string
// Connect to the URL using java's native library
URL url = new URL(sURL);
URLConnection request = url.openConnection();
request.connect();
// Convert to a JSON object to print data
JsonParser jp = new JsonParser(); //from gson
JsonElement root = jp.parse(new InputStreamReader((InputStream) request.getContent())); //Convert the input stream to a json element
JsonObject rootobj = root.getAsJsonObject(); //May be an array, may be an object.
String zipcode = rootobj.get("zip_code").getAsString(); //just grab the zipcode
몇 개의 라이브러리를 사용하는 것이 마음에 들지 않으면 한 줄로 수행 할 수 있습니다.
Apache Commons IOUtils 및 json.org 라이브러리를 포함하십시오 .
JSONObject json = new JSONObject(IOUtils.toString(new URL("https://graph.facebook.com/me"), Charset.forName("UTF-8")));
HttpClient 를 사용 하여 URL의 내용을 가져옵니다. 그런 다음 json.org 의 라이브러리를 사용 하여 JSON을 구문 분석하십시오. 많은 프로젝트에서이 두 라이브러리를 사용했으며 강력하고 사용하기 쉽습니다.
그 외에는 Facebook API Java 라이브러리를 사용해보십시오. 이 분야에 경험이 없지만 java에서 Facebook API 를 사용하는 것과 관련된 스택 오버플로에 대한 질문이 있습니다 . 라이브러리를 사용하기에 좋은 선택으로 RestFB 를보고 싶을 수도 있습니다.
가장 간단한 방법으로 json 파서를 수행했습니다.
package com.inzane.shoapp.activity;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;
import android.util.Log;
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");
System.out.println(line);
}
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());
System.out.println("error on parse data in jsonparser.java");
}
// return JSON String
return jObj;
}
}
이 클래스는 URL에서 json 객체를 반환합니다
json 객체를 원할 때이 클래스와 Activity 클래스의 메소드를 호출하면됩니다.
내 코드는 여기
String url = "your url";
JSONParser jsonParser = new JSONParser();
JSONObject object = jsonParser.getJSONFromUrl(url);
String content=object.getString("json key");
여기서 "json key"는 json 파일의 키임을 나타냅니다.
이것은 간단한 JSON 파일 예제입니다
{
"json":"hi"
}
여기서 "json"이 핵심이고 "hi"가 가치입니다
이것은 json 값을 문자열 내용으로 가져옵니다.
jersey-client를 사용하면이 maven 의존성을 포함하는 것이 매우 쉽습니다.
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.25.1</version>
</dependency>
그런 다음이 예제를 사용하여 호출하십시오.
String json = ClientBuilder.newClient().target("http://api.coindesk.com/v1/bpi/currentprice.json").request().accept(MediaType.APPLICATION_JSON).get(String.class);
그런 다음 Google의 Gson을 사용하여 JSON을 구문 분석하십시오.
Gson gson = new Gson();
Type gm = new TypeToken<CoinDeskMessage>() {}.getType();
CoinDeskMessage cdm = gson.fromJson(json, gm);
이것이 효과적인지 확실하지 않지만 가능한 방법 중 하나입니다.
URL 사용에서 json을 url.openStream()
읽고 내용을 문자열로 읽습니다.
이 문자열로 JSON 객체를 생성하십시오 (자세한 내용은 json.org ).
JSONObject(java.lang.String source)
Construct a JSONObject from a source JSON text string.
참고 URL : https://stackoverflow.com/questions/4308554/simplest-way-to-read-json-from-a-url-in-java
'IT story' 카테고리의 다른 글
Visual Studio Code에 책갈피가 있습니까? (0) | 2020.04.13 |
---|---|
많은 디스크 공간을 차지하는 Android SDK 폴더. (0) | 2020.04.13 |
bower는 bower.json을 자동으로 업데이트합니다 (0) | 2020.04.13 |
따옴표와 괄호가 있거나없는 setTimeout의 차이점 (0) | 2020.04.13 |
단일 결합의 여러 필드에서 LINQ의 결합을 수행하는 방법 (0) | 2020.04.13 |