如何在Body中发布原始类型的JSON数据?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Body中发布原始类型的JSON数据?相关的知识,希望对你有一定的参考价值。
我正在使用Volley请求向服务器发送一个帖子请求,并且我有一些必须发送的原始类型JSON数据。在这里我不知道如何发送第四个对象学生,这是Array类型。
要发布的JSON数据是
"course_id":1,
"batch_id":1,
"subject_id":1,
"students":["student_id":6,"present":0,"student_id":17,"present":0]
我的代码
private void fetchDataAndMarkAttendence()
RequestQueue requestQueue = Volley.newRequestQueue(this);
StringRequest stringRequest = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>()
@Override
public void onResponse(String response)
try
JSONObject jsonObject = new JSONObject(response);
status = jsonObject.getString("status");
catch (JSONException e)
e.printStackTrace();
, new Response.ErrorListener()
@Override
public void onErrorResponse(VolleyError error)
error.printStackTrace();
)
@Override
public Map<String, String> getHeaders() throws AuthFailureError
HashMap<String, String> map = new HashMap<String, String>();
SharedPreferences prefs = getApplicationContext().getSharedPreferences(MY_PREFS_NAME, Activity.MODE_PRIVATE);
token = prefs.getString("token","");
map.put("Authorization", "Token "+token);
return map;
所以,关于如何发布上述JSON数据的任何帮助都会有所帮助。
答案
这称为JSONArray。
try
JSONArray jsonArray = jsonObject.getJSONArray();
for (int i = 0; i < jsonArray.length(); i++)
int student_id = jsonObject.getInt("student_id");
int present = jsonObject.getInt("present");
catch (JSONException e)
e.printStackTrace();
编辑
提到,你想发布json。因此,在代码下面创建json suing并将mainJsonObject.toString();
作为参数发布。
try
JSONObject mainJsonObject = new JSONObject();
JSONArray jsonArray = new JSONArray();
//if more than one then wrap inside loop
JSONObject jsonObject = new JSONObject();
jsonObject.put("student_id", value);
jsonObject.put("present", value);
jsonArray.put(jsonObject);
//end loop
mainJsonObject.put("course_id", value);
mainJsonObject.put("batch_id", value);
mainJsonObject.put("subject_id", value);
mainJsonObject.put("students", jsonArray);
catch (JSONException e)
e.printStackTrace();
希望能帮助到你。
另一答案
用JsonObjectRequest替换StringRequest
JSONObject postparams = new JSONObject();
JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST,
url, postparams,
new Response.Listener()
@Override
public void onResponse(JSONObject response)
//Success Callback
,
new Response.ErrorListener()
@Override
public void onErrorResponse(VolleyError error)
//Failure Callback
);
另一答案
你能试试吗?这可能会解决您的问题。
RequestQueue requestQueue = Volley.newRequestQueue(this);
StringRequest stringRequest = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>()
@Override
public void onResponse(String response)
try
JSONObject jsonObject = new JSONObject(response);
status = jsonObject.getString("status");
catch (JSONException e)
e.printStackTrace();
, new Response.ErrorListener()
@Override
public void onErrorResponse(VolleyError error)
error.printStackTrace();
)
@Override
public byte[] getBody() throws AuthFailureError
String yourJSON = yourJsonObj.toString() ;
return yourJSON.getBytes();
@Override
public Map<String, String> getHeaders() throws AuthFailureError
HashMap<String, String> map = new HashMap<String, String>();
SharedPreferences prefs = getApplicationContext().getSharedPreferences(MY_PREFS_NAME, Activity.MODE_PRIVATE);
token = prefs.getString("token","");
map.put("Authorization", "Token "+token);
return map;
;
以上是关于如何在Body中发布原始类型的JSON数据?的主要内容,如果未能解决你的问题,请参考以下文章
你可以在 Guzzle POST Body 中包含原始 JSON 吗?
如何在 Spring REST 控制器中获取原始 JSON 正文?
如何在 React Fetch Blob 中使用 content-Type JSON(application/json) 发布原始正文数据
如何在 Laravel 5 中获取原始 json 请求有效负载?