ドキュメント内のIDまたは名前を取得してJavaで変更できるように、次のjson文字列をJava配列リストに変換したいと考えています。
{
response{
docs[
{id:#
name:#
}
]
}
}
多くのHTTPクライアントライブラリがありますが、JSONを取り込む場合、最善の策は、Jerseyクライアントライブラリを使用することです。JSONに一致するJavaオブジェクト(この場合、オブジェクトの配列などでResponse
あるフィールドを含むオブジェクト)を作成し、結果としてこれを期待するようにJerseyクライアントに指示する必要があります。そうすれば、Javaオブジェクトを操作して、任意の形式で出力できるようになります。Docs
Data
*更新
コードの基本的な概要。まず、Jerseyクライアントを設定します。
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.config.DefaultClientConfig;
import com.sun.jersey.api.client.WebResource;
....
final ClientConfig clientConfig = new DefaultClientConfig();
clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
final Client client = Client.create(clientConfig);
次に、リクエストを作成します。
final WebResource webResource = client.resource("http://mydomain.com/myresource");
この段階で、JSONをとして取得したい場合は、次のString
ように呼び出すことができます。
final String json = webResource.get(String.class);
ただし、他のHTTPクライアントよりもJerseyを使用することの本当の利点は、JSONを解析するため、JSONについて考える必要がないことです。次のクラスを作成する場合:
public class DataResponse
{
private final List<DataDoc> docs;
@JsonCreator
public DataResponse(@JsonProperty("docs")List<DataDocs> docs)
{
this.docs = docs;
}
public List<DataDoc> getDocs()
{
return this.docs;
}
}
public class DataDoc
{
final String id;
final String name;
// Other fields go here
@JsonCreator
public DataDoc(@JsonProperty("id") String id,
@JsonProperty("name") String name)
{
this.id = id;
this.name = name;
}
// Getters go here
}
次に、Jerseyクライアントコードを次のように変更できます。
final DataResponse response = webResource.get(DataResponse.class);
これで、通常のJavaオブジェクトのように応答してフィールドにアクセスできます。
URL url = new URL("webAddress");
URLConnection conn = url.openConnection();
BufferedReader reader = new BufferedReader(new InputStreamReader(
conn.getInputStream()));
String line = "";
ArrayList<String> list = new ArrayList<String>();
while ((line = reader.readLine()) != null) {
list.add(line);
//Perform operation on your data.It will read a line at a time.
}
実際にHTTPGETを実行したいので、このディスカッションを見てください。JavaでHTTP GETを実行するにはどうすればよいですか?