如何将json数组作为post请求发送?

chr*_*ris 9 android json android-volley jsonobjectrequest

我正在使用volley进行json解析.我想使用POST向服务器端发送一些数据.我想发送.现在任何人都可以告诉我如何将过滤器阵列发送到服务器?

以下是我的代码段.我也尝试HashmapJsonobject.但得到这个错误.

错误:

org.json.JSONException: Value  at Data of type java.lang.String cannot be converted to JSONObject
Run Code Online (Sandbox Code Playgroud)

格式

{
    "typeName": "MANUFACTURER",
    "typeId": 22,
    "cityId": 308,
    "sortBy": "productname",
    "sortOrder": "desc",
    "filter":[
                {
                    "filterId":101,
                    "typeName":"CAT_ID",

                     "filterId":102,
                    "typeName":"CAT_ID"
                }
             ]
}
Run Code Online (Sandbox Code Playgroud)

对于Code Check pastie

https://pastebin.com/u5qD8e2j

Kun*_*unu 10

如果您在调用API时遇到问题,那么这将对您有所帮助.

RequestQueue queue = Volley.newRequestQueue(this);
JsonObjectRequest jobReq = new JsonObjectRequest(Request.Method.POST, url, jObject,
        new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject jsonObject) {

            }
        },
        new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {

            }
        });

queue.add(jobReq);
Run Code Online (Sandbox Code Playgroud)

其中jObject是您要发送到服务器的JSON数据.

JSONArray的实现类似.而不是JsonObjectRequest使用JsonArrayRequest并发送jArray而不是jObject.

对于创建json数组,只需做一点调整

JSONArray array=new JSONArray();

for(int i=0;i<filter_items.size();i++){
    JSONObject obj=new JSONObject();
    try {
        obj.put("filterId",filter_items.get(i));
        obj.put("typeName","CAT_ID");
    } catch (JSONException e) {
        e.printStackTrace();
    }
    array.put(obj);
}
Run Code Online (Sandbox Code Playgroud)

最后添加json数组如下

jsonParams.put("filter",array);
Run Code Online (Sandbox Code Playgroud)

在您的情况下,您将Json数组转换为字符串


小智 6

我使用下面的代码将 JSONArray 发布到 volley。您必须使用 JsonArrayRequest 并直接传递 JSON 数组,而无需将其添加到任何 JSONObject。还要记住重写“parseNetworkResponse”方法以再次将响应转换为 JSONArray,因为 JsonArrayRequest 的 ResponseListner 需要一种 JSONArray

    String URL = "www.myposturl.com/data";

    RequestQueue queue = Volley.newRequestQueue(this);

    //Create json array for filter
    JSONArray array = new JSONArray();

    //Create json objects for two filter Ids
    JSONObject jsonParam = new JSONObject();
    JSONObject jsonParam1 = new JSONObject();

    try {
        //Add string params
        jsonParam.put("NAME", "XXXXXXXXXXXXXX");
        jsonParam.put("USERNAME", "XXXXXXXXXXXXXX");
        jsonParam.put("PASSWORD", "XXXXXXXXXXXX");
        jsonParam1.put("NAME", "XXXXXXXXXXXXXX");
        jsonParam1.put("USERNAME", "XXXXXXXXXXXXXX");
        jsonParam1.put("PASSWORD", "XXXXXXXXXXXX");
    } catch (JSONException e) {
        e.printStackTrace();
    }

    array.put(jsonParam);
    array.put(jsonParam1);
    JsonArrayRequest request_json = new JsonArrayRequest(Request.Method.POST, URL, array,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                    //Get Final response
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError volleyError) {
            VolleyLog.e("Error: ", volleyError.getMessage());

        }
    }) {
        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            Map<String, String> headers = new HashMap<String, String>();
            // Add headers
            return headers;
        }
        //Important part to convert response to JSON Array Again
        @Override
        protected Response<JSONArray> parseNetworkResponse(NetworkResponse response) {
            String responseString;
            JSONArray array = new JSONArray();
            if (response != null) {

                try {
                    responseString = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
                    JSONObject obj = new JSONObject(responseString);
                    (array).put(obj);
                } catch (Exception ex) {
                }
            }
            //return array;
            return Response.success(array, HttpHeaderParser.parseCacheHeaders(response));
        }
    };
    queue.add(request_json);
Run Code Online (Sandbox Code Playgroud)