我想将以下 json 字符串转换为 java arraylist,以便我可以获取文档中的 id 或名称并在 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 对象访问响应中的字段。
关于java - 将 json 字符串转换为 java arraylist(使用 jackson),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14755316/