1

私は現在、/.json を任意のサイトに追加してページの json を取得できるクールな Web サイト機能を使用して、Reddit のフロント ページを解析しようとしています。したがって、私が使用している URL は www.reddit.com/.json です。

json を解析して、最初の投稿の subreddit を取得したいと考えています。どうすればいいですか?私はいくつかの調査を行い、google gson api を見つけましたが、それを使用する方法がわかりません。そのドキュメントは実際には役に立ちません。

これまでのコードは次のとおりです。文字列に Json があります。

import java.io.*;
import java.net.*;
import com.google.gson.*;

public class Subreddits {

public static void main(String[] args) {
    URL u = null;
    try {
        u = new URL("http://www.reddit.com/.json");
    } catch (MalformedURLException e) {
        e.printStackTrace();
    }
    URLConnection yc = null;
    try {
        yc = u.openConnection();
    } catch (IOException e) {
        e.printStackTrace();
    }
    BufferedReader in = null;
    try {
        in = new BufferedReader(new InputStreamReader(yc.getInputStream()));
    } catch (IOException e) {
        e.printStackTrace();
    }
    String inputLine = null;
    StringBuilder sb = new StringBuilder();
    try {
        while ((inputLine = in.readLine()) != null){
            sb.append(inputLine);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    try {
        in.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    inputLine = sb.toString();//String of json
    System.out.println(inputLine);
    //I want to get [data][children][data][subreddit]
}

}

4

1 に答える 1

3

このクラス構造を作成して、応答を解析できます (疑似コード):

class Response
  Data data

class Data
  List<Child> children

class Child
  OtherData data

class OtherData
  String subreddit

次に、JSON 文字列を次のように解析します。

Gson gson = new Gson();
Response response = gson.fromJson(inputLine, Response.class);

必要な具体的なデータを取得するには、次のようにします。

String subreddit = response.getData().getChildren().getOtherData().getSubreddit();

JSON 応答の名前と一致する必要があるため、クラスの名前は変更できますが、属性の名前は変更できないことに注意してください。

また、具体的なデータを取得するために必要な属性のみを追加しましたが、JSON の要素名と一致するクラスにさらに属性を追加すると、より多くのデータが解析されることに注意してください...

その他の同様の例はこちらこちら、またはこちらです。

最後に、クラスをネストしてプロジェクトをクリーンに保つことができることに注意してください。将来的には、この別のアプローチを使用できますが、お勧めしません...

于 2013-05-17T00:20:19.427 に答える