public void doView(RenderRequest renderRequest, RenderResponse renderResponse) throws IOException, PortletException {
Map countryList = new HashMap();
String str = "http://10.10.10.25/TEPortalIntegration/CustomerPortalAppIntegrationService.svc/PaymentSchedule/PEPL/Unit336";
try {
URL url = new URL(str);
URLConnection urlc = url.openConnection();
BufferedReader bfr = new BufferedReader(new InputStreamReader(urlc.getInputStream()));
String line, title, des;
while ((line = bfr.readLine()) != null) {
JSONArray jsa = new JSONArray(line);
for (int i = 0; i < jsa.length(); i++) {
JSONObject jo = (JSONObject) jsa.get(i);
title = jo.getString("Amount");
countryList.put(i, title);
}
renderRequest.setAttribute("out-string", countryList);
super.doView(renderRequest, renderResponse);
}
} catch (Exception e) {
}
}
我正在尝试从liferay portlet类访问json
对象,我想将任意json
字段的值数组传递给jsp页面。
答案 0 :(得分:3)
在将其转换为JSON数组之前,您需要阅读完整的响应。这是因为响应中的每一行都将是一个(无效的)JSON片段,无法单独解析。稍作修改,您的代码就可以正常工作,下面重点介绍:
// fully read response
final String line;
final StringBuilder builder = new StringBuilder(2048);
while ((line = bfr.readLine()) != null) {
builder.append(line);
}
// convert response to JSON array
final JSONArray jsa = new JSONArray(builder.toString());
// extract out data of interest
for (int i = 0; i < jsa.length(); i++) {
final JSONObject jo = (JSONObject) jsa.get(i);
final String title = jo.getString("Amount");
countryList.put(i, title);
}