0

我想将以下 json 字符串转换为 java arraylist,以便我可以在文档中获取 id 或 name 并在 java 中进行更改。

{
 response{
  docs[
   {id:#
    name:#
   }
  ]
 }
}
4

3 回答 3

1

有许多 HTTP 客户端库,但鉴于您要引入 JSON,您最好的选择是使用 Jersey 客户端库。您需要创建一个与 JSON 匹配的 Java 对象(在这种情况下,一个Response对象包含一个对象Docs数组Data或类似的字段),并告诉 Jersey 客户端预期结果。然后,您将能够使用 Java 对象以您希望的任何形式输出它。

*更新

代码的基本概述。首先,设置 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,因此您无需考虑它。如果您创建以下类:

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 对象访问响应的字段。

于 2013-02-07T15:57:22.127 回答
1
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.

}
于 2013-02-07T15:58:47.363 回答
0

实际上你想执行 HTTP GET,所以看看这个讨论:How do I do a HTTP GET in Java?

于 2013-02-07T15:56:41.037 回答