URL로부터의 JSON 해석
URL에서 JSON을 해석할 수 있는 간단한 방법이 있나요?Gson을 사용했는데 도움이 되는 예를 찾을 수 없습니다.
먼저 URL(텍스트)을 다운로드해야 합니다.
private static String readUrl(String urlString) throws Exception { BufferedReader reader = null; try { URL url = new URL(urlString); reader = new BufferedReader(new InputStreamReader(url.openStream())); StringBuffer buffer = new StringBuffer(); int read; char[] chars = new char[1024]; while ((read = reader.read(chars)) != -1) buffer.append(chars, 0, read); return buffer.toString(); } finally { if (reader != null) reader.close(); } }
그런 다음 해석해야 합니다(여기에는 몇 가지 옵션이 있습니다).
GSON(전체 예):
static class Item { String title; String link; String description; } static class Page { String title; String link; String description; String language; List<Item> items; } public static void main(String[] args) throws Exception { String json = readUrl("http://www.javascriptkit.com/" + "dhtmltutors/javascriptkit.json"); Gson gson = new Gson(); Page page = gson.fromJson(json, Page.class); System.out.println(page.title); for (Item item : page.items) System.out.println(" " + item.title); }
출력:
javascriptkit.com Document Text Resizer JavaScript Reference- Keyboard/ Mouse Buttons Events Dynamically loading an external JavaScript or CSS file
json.org에서 Java API를 사용해 보십시오.
try { JSONObject json = new JSONObject(readUrl("...")); String title = (String) json.get("title"); ... } catch (JSONException e) { e.printStackTrace(); }
GSON에는 Reader 객체 from Json(Reader json, Class OfT)을 가져오는 빌더가 있습니다.
즉, URL에서 Reader를 작성한 후 Gson에 전달하여 스트림을 소비하고 역직렬화를 수행할 수 있습니다.
관련 코드는 3줄뿐입니다.
import java.io.InputStreamReader;
import java.net.URL;
import java.util.Map;
import com.google.gson.Gson;
public class GsonFetchNetworkJson {
public static void main(String[] ignored) throws Exception {
URL url = new URL("https://httpbin.org/get?color=red&shape=oval");
InputStreamReader reader = new InputStreamReader(url.openStream());
MyDto dto = new Gson().fromJson(reader, MyDto.class);
// using the deserialized object
System.out.println(dto.headers);
System.out.println(dto.args);
System.out.println(dto.origin);
System.out.println(dto.url);
}
private class MyDto {
Map<String, String> headers;
Map<String, String> args;
String origin;
String url;
}
}
엔드 포인트에서 403 에러 코드가 표시되었을 경우, 그 이외의 경우는 정상적으로 동작합니다(예:
curl
또는 다른 클라이언트)의 경우 엔드 포인트에 의해 예측될 수 있습니다.User-Agent
기본적으로는 Java URL Connection은 헤더 설정을 하지 않습니다.간단한 수정은 파일 상단에 추가하는 것입니다.System.setProperty("http.agent", "Netscape 1.0");
.
org.apache.commons.io 를 사용할 수 있습니다.다운로드 및 org.json에 대한 IOUtils.구문 분석용 JSONTokener:
JSONObject jo = (JSONObject) new JSONTokener(IOUtils.toString(new URL("http://gdata.youtube.com/feeds/api/videos/SIFL9qfmu5U?alt=json"))).nextValue();
System.out.println(jo.getString("version"));
여기 쉬운 방법이 있습니다.
먼저 URL에서 JSON을 해석합니다.
public String readJSONFeed(String URL) {
StringBuilder stringBuilder = new StringBuilder();
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(URL);
try {
HttpResponse response = httpClient.execute(httpGet);
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
if (statusCode == 200) {
HttpEntity entity = response.getEntity();
InputStream inputStream = entity.getContent();
BufferedReader reader = new BufferedReader(
new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
stringBuilder.append(line);
}
inputStream.close();
} else {
Log.d("JSON", "Failed to download file");
}
} catch (Exception e) {
Log.d("readJSONFeed", e.getLocalizedMessage());
}
return stringBuilder.toString();
}
그런 다음 작업을 배치하고 JSON에서 원하는 값을 읽습니다.
private class ReadPlacesFeedTask extends AsyncTask<String, Void, String> {
protected String doInBackground(String... urls) {
return readJSONFeed(urls[0]);
}
protected void onPostExecute(String result) {
JSONObject json;
try {
json = new JSONObject(result);
////CREATE A JSON OBJECT////
JSONObject data = json.getJSONObject("JSON OBJECT NAME");
////GET A STRING////
String title = data.getString("");
//Similarly you can get other types of data
//Replace String to the desired data type like int or boolean etc.
} catch (JSONException e1) {
e1.printStackTrace();
}
//GETTINGS DATA FROM JSON ARRAY//
try {
JSONObject jsonObject = new JSONObject(result);
JSONArray postalCodesItems = new JSONArray(
jsonObject.getString("postalCodes"));
JSONObject postalCodesItem = postalCodesItems
.getJSONObject(1);
} catch (Exception e) {
Log.d("ReadPlacesFeedTask", e.getLocalizedMessage());
}
}
}
그런 다음 다음과 같은 작업을 수행할 수 있습니다.
new ReadPlacesFeedTask()
.execute("JSON URL");
public static TargetClassJson downloadPaletteJson(String url) throws IOException {
if (StringUtils.isBlank(url)) {
return null;
}
String genreJson = IOUtils.toString(new URL(url).openStream());
return new Gson().fromJson(genreJson, TargetClassJson.class);
}
import org.apache.commons.httpclient.util.URIUtil;
import org.apache.commons.io.FileUtils;
import groovy.json.JsonSlurper;
import java.io.File;
tmpDir = "/defineYourTmpDir"
URL url = new URL("http://yourOwnURL.com/file.json");
String path = tmpDir + "/tmpRemoteJson" + ".json";
remoteJsonFile = new File(path);
remoteJsonFile.deleteOnExit();
FileUtils.copyURLToFile(url, remoteJsonFile);
String fileTMPPath = remoteJsonFile.getPath();
def inputTMPFile = new File(fileTMPPath);
remoteParsedJson = new JsonSlurper().parseText(inputTMPFile.text);
자바 1.8을 com.fasterxml.jackson.databind와 함께 사용합니다.오브젝트 맵퍼
ObjectMapper mapper = new ObjectMapper();
Integer value = mapper.readValue(new URL("your url here"), Integer.class);
Integer.class는 복잡한 유형일 수도 있습니다.예를 들면요.
간단한 대체 솔루션:
URL을 json에서 csv 변환기로 붙여넣습니다.
Excel 또는 Open Office에서 CSV 파일을 엽니다.
스프레드시트 도구를 사용하여 데이터 구문 분석
언급URL : https://stackoverflow.com/questions/7467568/parsing-json-from-url
'source' 카테고리의 다른 글
WordPress의 하위 테마에서 위젯을 재정의하려면 어떻게 해야 합니까? (0) | 2023.02.23 |
---|---|
TypeScript에서 "as const"는 무엇을 의미하며 그 사용 사례는 무엇입니까? (0) | 2023.02.23 |
ES7로 응답: Uncaughed TypeError: 정의되지 않은 속성 '상태'를 읽을 수 없습니다. (0) | 2023.02.18 |
[ts] 종료되지 않은 정규 표현 리터럴. (0) | 2023.02.14 |
AngularJS에서 ng-pris틴과 ng-dirty의 차이점은 무엇입니까? (0) | 2023.02.14 |