当数组仅包含一个元素时,JSON响应中的对象数组将作为单个对象接收

时间:2014-09-16 11:41:31

标签: javascript jquery ajax json

我在响应中向我的资源发回一个对象数组,当数组只包含一个元素时,我无法循环数组,因为响应结果是单个对象而不是包含一个对象的数组。

从前端获得此代码:

function loadContent(sUsername, sPath){
    arrayContentBeans = new Array();
    var sUrl = "http://localhost:8080/crosscloudservice/services/RDF/retrieveContent?username="+sUsername+"&path="+sPath;
    $.ajax({
        type: "GET",
        url: sUrl,
        contentType: "application/json",
        dataType: "json",
        async: false,
        success: function parse(resp, status, xhr) {
           $("#message").html("STATUS: " + xhr.status + " " + xhr.statusText + "\n" + resp);
           $("#message").hide();
           $.each(resp, function() {
                $.each(this, function(i, cb) {
                    arrayContentBeans.push(cb);
                });
           });

           renderContent();
        },
        error: function(resp, status, xhr){
            $("#message").html("ERROR: " + resp.status + " " + resp.statusText + "\n" + xhr);
            $("#message").show();
        }
    });
}

任何人都可以告诉我如何强制JSON拥有一个数组,即使它只包含一个对象?

更新1

这是资源:

@GET
    @XmlElement(name = "contentbean")
    @Path("/retrieveContent")
    @Produces(MediaType.APPLICATION_JSON)
    public List<ContentBean> retrieve(@QueryParam("username") String Username, @QueryParam("path") String Path) {
        ContentBean oContentBean = buildResult(Username, Path);
        List<ContentBean> lContentBeans = new ArrayList<ContentBean>();
        lContentBeans.add(oContentBean);
        return lContentBeans;
    }

更新2

我已经添加了应该将我的数组现在jackson-core-2.2.3.jar和我的web.xml中的以下标记序列化的内容:

<init-param>
      <param-name>com.sun.jersey.config.property.packages</param-name>
      <param-value>org.qcri.crosscloud.ws;org.codehaus.jackson.jaxrs</param-value>
</init-param>

但没有运气,它仍然表现得一样:(任何想法?

1 个答案:

答案 0 :(得分:0)

如果要发送一个对象数组,那么请确保当只有一个元素要发送时将其序列化为数组,这样客户端将始终获得相同的数据结构