[java] 자바의 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 IOUtilsjson.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);