it-swarm.com.de

einfachste Möglichkeit, json von einer URL in java zu lesen

Dies mag eine dumme Frage sein, aber was ist der einfachste Weg, um JSON aus _ url _ zu lesen und zu analysieren in Java ?

In Groovy handelt es sich um wenige Codezeilen. Java Beispiele, die ich finde, sind lächerlich lang (und haben einen riesigen Block zur Behandlung von Ausnahmen).

Ich möchte nur den Inhalt von diesen Link lesen.

231
Pomponius

Mit dem Maven-Artefakt org.json:json habe ich den folgenden Code erhalten, der meiner Meinung nach ziemlich kurz ist. Nicht so kurz wie möglich, aber trotzdem brauchbar.

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"));
  }
}
184
Roland Illig

Hier sind einige alternative Versionen mit Jackson (da es mehr als eine Möglichkeit gibt, Daten als zu speichern):

  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);

Und speziell der übliche (IMO-) Fall, in dem Sie mit Java -Objekten arbeiten möchten, kann zu einem einzigen Zeilenumbruch gemacht werden:

FacebookGraph graph = new ObjectMapper().readValue(url, FaceBookGraph.class);

Andere Bibliotheken wie Gson unterstützen auch einzeilige Methoden. warum viele Beispiele viel längere Abschnitte zeigen, ist merkwürdig. Und noch schlimmer ist, dass viele Beispiele veraltete org.json-Bibliotheken verwenden. Es war vielleicht das erste Mal, aber es gibt ein halbes Dutzend bessere Alternativen. Es gibt also kaum einen Grund, es zu benutzen.

63
StaxMan

Der einfachste Weg: Verwenden Sie gson, Googles eigene goto json-Bibliothek. https://code.google.com/p/google-gson/

Hier ist ein Beispiel. Ich gehe auf diese kostenlose Geolocator-Website, analysiere den JSON und zeige meine Postleitzahl an. (Setzen Sie dieses Zeug einfach in eine Hauptmethode ein, um es zu testen.)

    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
55
user2654569

Wenn es Ihnen nichts ausmacht, ein paar Bibliotheken zu verwenden, können Sie dies in einer einzigen Zeile tun.

Schließen Sie Apache Commons IOUtils & json.org Bibliotheken ein.

JSONObject json = new JSONObject(IOUtils.toString(new URL("https://graph.facebook.com/me"), Charset.forName("UTF-8")));
39
ezwrighter

Verwenden Sie HttpClient , um den Inhalt der URL abzurufen. Verwenden Sie anschließend die Bibliothek von json.org , um den JSON-Code zu analysieren. Ich habe diese beiden Bibliotheken in vielen Projekten verwendet und sie waren robust und einfach zu verwenden.

Ansonsten können Sie versuchen, eine Facebook-API-Bibliothek Java zu verwenden. Ich habe keine Erfahrung in diesem Bereich, aber es gibt eine Frage zum Stapelüberlauf im Zusammenhang mit Verwendung einer Facebook-API in Java . Vielleicht möchten Sie RestFB als eine gute Wahl für eine Bibliothek betrachten.

6
Jon Snyder

Ich habe den Json-Parser auf einfachste Weise durchgeführt, hier ist es

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;

}
}

diese Klasse gibt das JSON-Objekt aus der URL zurück

und wenn Sie das json-Objekt wollen, rufen Sie einfach diese Klasse und die Methode in Ihrer Activity-Klasse auf

mein Code ist hier

String url = "your url";
JSONParser jsonParser = new JSONParser();
JSONObject object = jsonParser.getJSONFromUrl(url);
String content=object.getString("json key");

hier wird der "json key" als der schlüssel in ihrer json datei bezeichnet

dies ist ein einfaches Beispiel für eine JSON-Datei

{
    "json":"hi"
}

Hier ist "json" der Schlüssel und "hi" der Wert

Dadurch wird Ihr json-Wert auf Zeichenfolgeninhalt gesetzt.

5
Ribin Das

Mit jersey-client ist es sehr einfach, schließen Sie einfach diese maven-Abhängigkeit ein:

<dependency>
  <groupId>org.glassfish.jersey.core</groupId>
  <artifactId>jersey-client</artifactId>
  <version>2.25.1</version>
</dependency>

Rufen Sie es dann anhand des folgenden Beispiels auf:

String json = ClientBuilder.newClient().target("http://api.coindesk.com/v1/bpi/currentprice.json").request().accept(MediaType.APPLICATION_JSON).get(String.class);

Verwenden Sie dann Googles Gson, um den JSON zu analysieren:

Gson gson = new Gson();
Type gm = new TypeToken<CoinDeskMessage>() {}.getType();
CoinDeskMessage cdm = gson.fromJson(json, gm);
3
user3892260

Ich bin nicht sicher, ob dies effizient ist, aber dies ist einer der möglichen Wege:

Lesen Sie json von der URL mit url.openStream() und lesen Sie den Inhalt in eine Zeichenfolge.

konstruiere ein JSON Objekt mit diesem String (mehr unter json.org )

JSONObject(Java.lang.String source)
      Construct a JSONObject from a source JSON text string.
2
kunal