您好我正在尝试使用基本的Auth从URL解析json数据。数据来自服务器。
HttpHost target = new HttpHost(targetUrl, 443, "https");
HttpHost proxy = new HttpHost(proxyHost, Integer.valueOf(proxyPort), "http");
RequestConfig config = RequestConfig.custom().setConnectTimeout(5000).setConnectionRequestTimeout(5000)
.setProxy(proxy).setAuthenticationEnabled(true).build();
HttpGet httpget = new HttpGet(targetURI + orderId + "/prod.json");
httpget.setConfig(config);
response = httpClient.execute(target, httpget);
System.out.println(" Response ::" + EntityUtils.toString(response.getEntity()));
显示json数据,如
[
{
"id": 1,
"order_id": 100,
"product_id": 113,
"order_address_id": 1,
"name": "Paper 002",
}
]
我也有这个Json数据的pojo类。但是当我试图读取显示数据时它会抛出错误。我使用jackson读取数据读取数据的代码是。
String jsondata = EntityUtils.toString(response.getEntity());
ObjectMapper objMapper = new ObjectMapper();
ProDesc pd = objMapper.readValue(jsondata, ProDesc.class);
System.out.println("** ID " + pd.getId());
那么如何使用jackson解析数据呢?我已经使用上面的代码显示了json数据。
答案 0 :(得分:2)
您需要反序列化ProDesc
个对象列表,因为您的主JSON是一个数组。
这就是我用杰克逊2.1.4反序列化的东西:
List<ProDesc> proDescList = objMapper.readValue(jsondata, objMapper.getTypeFactory().constructParametricType(List.class, ProDesc.class));
编辑:如果您的ProDesc
课程仅包含id
成员,则需要告诉杰克逊忽略其他成员的注释,如下所示:
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@JsonIgnoreProperties(ignoreUnknown=true)
public class ProDesc {
private int id;
public ProDesc(){}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
答案 1 :(得分:0)
我用这段代码来解决这个问题
List<ProdDesc> proDescList = objMapper.readValue(jsondata, new TypeReference<List<ProDes>>() { });
for(ProDesc produ:proDescList)
{ System.out.println(produ.getId()); }