如何从Java客户端消费JSON Web服务?

3
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 页面。


3
在将响应转换为JSONArray之前,您需要阅读完整的响应。响应中的每一行都将成为一个(无效的)JSON片段,并且不能单独解析。 - Perception
1个回答

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);
}

在最后一行有错误:final JSONArray jsa = new JSONArray(builder.toString()); 目前还没有生效。 - Boat
我应该包括 import org.json.JSONArray 还是 import org.json.simple.JSONArray? - Boat
是的,如果我正在进行控制台应用程序,则它可以工作。但在servlet和portlet类中无法工作... 在JSP servlet中,它会抛出一个错误,即org.json.JSONArray类未找到异常。 - Boat
1
你可能想要发布一个单独的问题来询问新的问题。我可以告诉你,它可能与打包WAR文件的方式有关。似乎没有包含JSON.org类。 - Perception

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接