如何解析JSON数据表单URL?

时间:2016-06-08 11:48:08

标签: java json parsing jackson

您好我正在尝试使用基本的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数据。

2 个答案:

答案 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()); }