5

JSON と REST は初めてです。次のような文字列を返すサーバーを使用しています。

[{"username":"Hello","email":"hello@email.com","credits":"100","twitter_username":""},{"username":"Goodbye","email":"goodbye@email.com","credits":"0","twitter_username":""}]

それらをコンソールに文字列として出力することができましたが、今はそれらを JSON 配列に変換したいと考えています。これまでのコードではエラーは返されませんでしたが、新しい JSON 配列のコンストラクターに何を入れればよいかわかりません。同僚から送られてきたコードの一部を参照してきました。コンストラクターは new JSONArray(response) でしたが、彼は「応答」が何であるかを教えてくれませんでした。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import sun.misc.BASE64Encoder;

public class NetClientGet {

    public static void main(String[] args) {

      try {

        URL url = new URL("http://username:password@mobile.crowdedmedia.co.uk/index.php/api/users/get_users/");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");

        BASE64Encoder enc = new sun.misc.BASE64Encoder();
        String userpassword = "username:password";
        String encoded = enc.encode(userpassword.getBytes());
        conn.setRequestProperty("Authorization", "Basic " + encoded);

        if (conn.getResponseCode() != 200) {
            throw new RuntimeException("Failed : HTTP error code : "
                    + conn.getResponseCode());
        }

        BufferedReader br = new BufferedReader(new InputStreamReader(
            (conn.getInputStream())));

        String output;
        System.out.println("Output from Server .... \n");
        while ((output = br.readLine()) != null) {
            System.out.println(output);
        }

        JSONArray array = new JSONArray(output);

        for (int i =0; i < array.size(); i++) {
            JSONObject row = array.getJSONObject(i);
            String user = row.getString("username");
            System.out.println(user);
        }

        conn.disconnect();

      } catch (MalformedURLException e) {

        e.printStackTrace();

      } catch (IOException e) {

        e.printStackTrace();

      }

    }
}
4

3 に答える 3

12
  • GSONを使用して文字列を JsonArray としてフォーマットします
  • 次に、JsonArray をトラバースして値を取得します

コードサンプル

String json = "[{\"username\":\"Hello\",\"email\":\"hello@email.com\",\"credits\":\"100\",\"twitter_username\":\"\"},{\"username\":\"Goodbye\",\"email\":\"goodbye@email.com\",\"credits\":\"0\",\"twitter_username\":\"\"}]";
JsonArray jArray = new JsonParser().parse(json).getAsJsonArray();
for (int i=0;i<jArray.size();i++) {
    JsonObject jsonObject = jArray.get(i).getAsJsonObject();
    System.out.println(jsonObject.get("username"));
    System.out.println(jsonObject.get("email"));
    System.out.println(jsonObject.get("credits"));
    System.out.println(jsonObject.get("twitter_username"));
    System.out.println("*********");
}
于 2012-07-16T13:41:07.960 に答える
1

jsonを操作するためにgsonライブラリを使用しています。ここから gson をダウンロードできます。jsonを扱うのにとても良いライブラリです。最初に json パーサーを作成します。これは json 文字列を解析します。

JsonParser parser = new JsonParser();

空のjson配列を初期化するようになりました

JsonArray jArray = new JsonArray();

パーサーを使用してjson配列を作成します

jArray = parser.parse(outputString).getAsJsonArray();
于 2012-07-16T12:04:37.897 に答える
0

私は org.json.simple.JSONObject と org.json.simple.JSONArray を使用しましたが、net.sf.json.JSONArray も同じように動作することを願っています。

出力には次の文字列形式を入力する必要があります(JSONArray array = new JSONArray( output ); )

 {"YOUR_ARRAY_NAME": [{"username":"Hello","email":"hello@email.com","credits":"100","twitter_username":""},{"username":"Goodbye","email":"goodbye@email.com","credits":"0","twitter_username":""}]}

これはJSONArrayの文字列表現です。

于 2012-07-16T12:48:44.163 に答える