Mungkin ini pertanyaan bodoh tapi apa adalah cara paling sederhana untuk membaca dan mengurai JSON dari URL di Jawa?
Di Groovy, it's hitungan beberapa baris kode. Jawa contoh-contoh yang saya temukan adalah ridiculously panjang (dan memiliki banyak pengecualian penanganan blok).
Semua saya ingin lakukan adalah untuk membaca isi dari link ini.
Menggunakan Maven artefak org.json:json
saya punya kode berikut, yang saya pikir cukup singkat. Tidak sesingkat mungkin, tetapi masih dapat digunakan.
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"));
}
}
Berikut ini adalah beberapa alternatif versi dengan Jackson (karena ada lebih dari satu cara, anda mungkin ingin data):
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);
Dan secara khusus biasa (IMO) kasus di mana anda ingin berurusan dengan Java benda, dapat membuat salah satu kapal:
FacebookGraph graph = new ObjectMapper().readValue(url, FaceBookGraph.class);
Lainnya libs seperti Gson juga mendukung satu garis metode; mengapa banyak contoh menunjukkan banyak lagi bagian-bagian yang ganjil. Dan bahkan lebih buruk lagi adalah bahwa banyak contoh penggunaan usang org.json perpustakaan; ini mungkin telah menjadi hal pertama sekitar, tapi ada setengah lusin alternatif yang lebih baik sehingga ada sedikit alasan untuk menggunakannya.
Cara termudah: Menggunakan gson, google's sendiri goto json library. https://code.google.com/p/google-gson/
Berikut ini adalah contoh. I'm akan gratis ini geolocator ini website dan parsing json dan saya menampilkan kode pos. (hanya menempatkan hal ini dalam metode utama untuk menguji it out)
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
Jika anda don't pikiran menggunakan beberapa perpustakaan itu bisa dilakukan dalam satu baris.
Termasuk Apache Commons IOUtils & json.org perpustakaan.
JSONObject json = new JSONObject(IOUtils.toString(new URL("https://graph.facebook.com/me"), Charset.forName("UTF-8")));
Gunakan HttpClient untuk ambil isi dari URL. Dan kemudian menggunakan perpustakaan dari json.org untuk parse JSON. I've digunakan dua perpustakaan di banyak proyek dan mereka telah kuat dan mudah digunakan.
Lain dari itu anda dapat mencoba menggunakan Facebook API java perpustakaan. Saya don't memiliki pengalaman di bidang ini, tapi ada sebuah pertanyaan pada stack overflow yang berkaitan dengan menggunakan Facebook API di jawa. Anda mungkin ingin melihat RestFB sebagai pilihan yang baik bagi perpustakaan untuk digunakan.
Saya telah melakukan json parser dalam cara yang paling sederhana, di sini adalah
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;
}
}
kelas ini mengembalikan json object dari url
dan bila anda ingin objek json anda hanya menyebutnya kelas dan metode dalam Kegiatan kelas
kode saya di sini
String url = "your url";
JSONParser jsonParser = new JSONParser();
JSONObject object = jsonParser.getJSONFromUrl(url);
String content=object.getString("json key");
di sini, "json kunci" dilambangkan bahwa kunci dalam file json
ini adalah sederhana json file contoh
{
"json":"hi"
}
Di sini "json" dan "hi" adalah nilai
Ini akan membuat anda json nilai untuk string konten.
It's sangat mudah, dengan menggunakan jersey-klien, hanya seperti ini maven ketergantungan:
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.25.1</version>
</dependency>
Kemudian memohon menggunakan contoh ini:
String json = ClientBuilder.newClient().target("http://api.coindesk.com/v1/bpi/currentprice.json").request().accept(MediaType.APPLICATION_JSON).get(String.class);
Kemudian gunakan Google's Gson untuk parse JSON:
Gson gson = new Gson();
Type gm = new TypeToken<CoinDeskMessage>() {}.getType();
CoinDeskMessage cdm = gson.fromJson(json, gm);
Saya tidak yakin jika ini adalah efisien, tapi ini adalah salah satu cara yang mungkin:
Baca json dari url menggunakan url.openStream()
dan membaca isi ke dalam sebuah string.
membangun objek JSON dengan string ini (lebih di json.org)
JSONObject(java.lang.String source)
Construct a JSONObject from a source JSON text string.