Android中向HTTP服务器发送指定格式JSON失败,求解决方案
Android JSON请求异常排查与修复建议
你遇到的问题确实和JSON结构不匹配有关——目标要求的JSON里location是一个嵌套的子对象,但你的代码里直接把xCord、yCord放到了根JSON对象里,这就导致请求的格式和服务器预期的完全不一致,自然会运行异常。
下面是修正后的完整代码示例,帮你把坐标字段正确嵌套到location对象中:
JSONObject postData = new JSONObject(); try { // 填充根层级的字段 postData.put("deviceID", unique_id); postData.put("depth", ((HoleSize) this.getApplication()).getDepth()); // 创建location子JSON对象,填充坐标数据 JSONObject locationObj = new JSONObject(); locationObj.put("xCord", ((HoleSize) this.getApplication()).getXCord()); // 替换成你实际获取xCord的方法 locationObj.put("yCord", ((HoleSize) this.getApplication()).getYCord()); // 替换成你实际获取yCord的方法 // 将location子对象加入根JSON postData.put("location", locationObj); postData.put("size", 3); // 如果size是动态值,替换成对应获取逻辑 // 后续可以在这里添加发送HTTP请求的代码(比如OkHttp、HttpURLConnection) } catch (JSONException e) { e.printStackTrace(); // 可以在这里添加用户可见的错误提示,比如Toast提示数据格式异常 }
另外再给你几个排查小建议:
- 检查字段类型匹配:确保
deviceID是长整型数字(不要传成字符串)、depth/size是整数、xCord/yCord是浮点数,和目标JSON的类型完全一致 - 打印验证:可以在代码里加
Log.d("JSON", postData.toString()),把生成的JSON字符串打印出来,和你预期的格式对比,看是否有字段缺失、符号错误 - 确认请求头:发送请求时一定要把
Content-Type设置为application/json,否则服务器可能无法正确解析你的请求体
内容的提问来源于stack exchange,提问作者ihristov




