我想将以下 json 字符串转换为 java arraylist,以便我可以在文档中获取 id 或 name 并在 java 中进行更改。
{
response{
docs[
{id:#
name:#
}
]
}
}
有许多 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 对象访问响应的字段。
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.
}
实际上你想执行 HTTP GET,所以看看这个讨论:How do I do a HTTP GET in Java?