关于java解析json文件如何获得手机端发来的json数据

java怎么接收android请求过来的json数据_百度知道
java怎么接收android请求过来的json数据
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
java接收android请求json数据的方法:如果发送的没有参数名称&你可以直接得到请求体,如InputStream&inputStream&=&urlConnection.getInputStream();&&String&encoding&=&urlConnection.getContentEncoding();&&String&body&=&IOUtils.toString(inputStream,&encoding);&&System.out.println(body);&&如果body&就是那个json内容&使用fastjson进行解析就可以了JSONObject&&map&=&JSON.parseObject(body);System.out.println(map.getString(&mobileNo&));&&//还是System.out.println(map.get(&mobileNo&));&&?具体看一下接口文档或者Map&map&=&JSON.parseObject(body,&Map.class);System.out.println(map.get(&mobileNo&)); &
采纳率:95%
来自团队:
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
1,现在需要从过滤器里面获取HttpServletResponse,再从HttpServletResponse获取返回给前端的json数据。
2,场景,当用户发生了增删改的操作的时候,获取用户操作的url,参数,然后根据操作是否成功,若是成功,那么将用户的这些操作日志数据插入数据库,用户操作的url,参数可以从ServletRequest里面获取,但是用户操作是否成功需要根据HttpServletResponse里面返回给前端json数据里面的一个key来判断。但是现在不知怎么获取json数据。3,`public class LogFilter extends AdviceFilter {
public void afterCompletion(ServletRequest request, ServletResponse response, Exception exception) throws Exception {
HttpServletRequest r = (HttpServletRequest)
HttpServletResponse res = (HttpServletResponse)
System.out.println(r.getMethod());
Map&String, String[]& map = request.getParameterMap();
Map&String ,String & resultMap=new LinkedHashMap&&();
for (Map.Entry&String, String[]& me : map.entrySet()) {
String paramName = me.getKey();
resultMap.put(paramName,request.getParameter(paramName));
System.out.println("resultMap"+resultMap);
System.out.println(r.getRequestURI());
//就是这里不知道怎么获取HttpServletResponse里面的json
ServletOutputStream out=res.getOutputStream();
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
很难拿到,除非你做一个Filter把response.getOutputStream()也重载了,给个参考:
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
response是采用缓存输出流的方式回写,当执行到HandlerInterceptor.afterCompletion时,大部分数据可能已经写回的客户端, 没有办法获得了. 可以尝试用Servlet Filter, 把里面的response替换成自己的实现, 但要注意的是如果不用流,而是保留在内存里,那么以性能和内存都要小心处理才行.
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
重写HttpServletResponseWrapper,class MyResponseWrapper extends HttpServletResponseWrapper,在Filter里面public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletExceptionMyResponseWrapper responseWrapper=new MyResponseWrapper((HttpServletResponse)response);即可使用responseWrapper得到json
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
在servlet填充Response的时候,做JSON格式的数据转换使用的类是net.sf.json.JSONObject,传入response对象和返回的显示类,修改response,返回前台JSON格式数据
以JSON格式输出
@param response
protected void responseOutWithJson(HttpServletResponse response,
Object responseObject) {
//将实体对象转换为JSON Object转换
JSONObject responseJSONObject = JSONObject.fromObject(responseObject);
response.setCharacterEncoding("UTF-8");
response.setContentType("application/ charset=utf-8");
PrintWriter out =
out = response.getWriter();
out.append(responseJSONObject.toString());
logger.debug("返回是\n");
logger.debug(responseJSONObject.toString());
} catch (IOException e) {
e.printStackTrace();
} finally {
if (out != null) {
out.close();
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
我现在也是在这个问题.求助呀
同步到新浪微博
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。购买商品:
商品价格:
价格读取中
支付方式:
请扫码进行支付
请扫码进行支付
会员立省1.20元,
本课程为收费课程,请先购买当前课程
本课程为会员课时,请先开通会员
本课程为会员课时,您的会员账号已经过期
本课程为会员课时,您的会员账号已被禁用
文件地址有误
章未解锁,暂无观看权限
拼团未完成,暂无观看权限
购买未完成,暂无观看权限
播放器加载失败: 未检测到Flash Player,请
正在打包,请勿关闭和刷新页面
下一节课程:学习的重要性 (02:59)
每周都有机会获得讲师会员卡~~~
领取优惠券
正在努力加载中~~Java后台解析android端发送的JSON字符串
在设备通讯中,往往会用到数据交互。我们这里用的是通过HTTP协议发送JSON数据,android客户端把数据进行打包,发送到后台服务器,后台解析出来。
&//android客户端拼装JSON字符串
//如下的拼装结果为:
{&data&:[{&id&:&12345&,&name&:&张三&},{&id&:&54321&,&name&:&李四&}]}
JSONObject jsonObject = new JSONObject();
JSONArray jsonArray = new JSONArray();
& & & & jsonObject.put(&name&, &张三&);
& & & & jsonObject.put(&id&, &12345&);
& & & & jsonArray.put(jsonObject);
& & & & jsonObject = new JSONObject();
& & & & jsonObject.put(&name&, &李四&);
& & & & jsonObject.put(&id&, &54321&);
& & & & jsonArray.put(jsonObject);
& & & & String json = &{\&data\&:&+jsonArray.toString()+&}&;
& & & & Log.v(&zd&, &json&);
& & & & result = new HttpUtils().sendJsonData(Consant.ip + Consant.url3, json);
& & & & mHandler.sendEmptyMessage(0x0001);
& & } catch (JSONException e) {
& & & & e.printStackTrace();
* 向服务器发送数据,编码类型为utf-8
* svrUrl为服务器地址
* ParamStr为JSON字符串
& & & & &* 发送类型为 POST
public String sendJsonData(String svrUrl, String ParamStr) {
& & Log.v(&zd&, &send json&);
& & // 转成指定格式
& & & & byte[] requestData = ParamStr.getBytes(&UTF-8&);
& & & & HttpURLConnection conn =
& & & & DataOutputStream outStream =
& & & & String MULTIPART_FORM_DATA = &multipart/form-data&;
& & & & // 构造一个post请求的http头
& & & & URL url = new URL(svrUrl); // 服务器地址
& & & & conn = (HttpURLConnection) url.openConnection();
& & & & conn.setDoInput(true); // 允许输入
& & & & conn.setDoOutput(true); // 允许输出
& & & & conn.setUseCaches(false); // 不使用caches
& & & & conn.setRequestMethod(&POST&);
& & & & conn.setRequestProperty(&Accept-Charset&, &GBK,utf-8;q=0.7,*;q=0.3&);
& & & & conn.setRequestProperty(&Connection&, &Keep-Alive&);
& & & & conn.setRequestProperty(&Content-Type&, MULTIPART_FORM_DATA);
& & & & conn.setRequestProperty(&Content-Length&, Long.toString(requestData.length));
& & & & conn.setRequestProperty(&data&, ParamStr);
& & & & // 请求参数内容, 获取输出到网络的连接流对象
& & & & outStream = new DataOutputStream(conn.getOutputStream());
& & & & outStream.write(requestData, 0, requestData.length);
& & & & outStream.flush();
& & & & outStream.close();
& & & & ByteArrayOutputStream outStream2 = new ByteArrayOutputStream();
& & & & int cah = conn.getResponseCode();
& & & & if (cah != 200) {
& & & & & & Log.v(&data&, &服务器响应错误代码:& + cah);
& & & & & & return &0&;
& & & & }else if(cah == 200){
& & & & & & Log.v(&data&, &服务器响应成功:& + cah);
& & & & InputStream inputStream = conn.getInputStream();
& & & & int len = 0;
& & & & byte[] data = new byte[1024];
& & & & while ((len = inputStream.read(data)) != -1) {
& & & & & & & & outStream2.write(data, 0, len);
& & & & outStream2.close();
& & & & inputStream.close();
& & & & String responseStr = new String(outStream2.toByteArray());
& & & & Log.v(&data&, &data = & + responseStr);
& & & & return responseS
& & } catch (Exception e) {
& & & & return &&;
接下来看一看后台的处理
后台用的是利用Tomcat作为服务器
创建的是一个动态的Web项目,通过Servlet的doPost()方法来接收
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
& & & & request.setCharacterEncoding(&utf-8&);
& & & & String method = request.getParameter(&method&).toString();
& & & & System.out.println(&method = & + method);
& & & & System.out.println(new Date().toLocaleString());
& & & & String jsonData = getData(request);
& & & & jsonStringToList(jsonData);
& & } catch (Exception e) {
& & & & e.printStackTrace();
& & doGet(request, response);
public String getData(HttpServletRequest req){
& & & & String result =
& & & & try {
& & & & & & //包装request的输入流
& & & & & & BufferedReader br = new BufferedReader( &
& & & & & & & new InputStreamReader((ServletInputStream) req.getInputStream(), &utf-8&));
& & & & & & //缓冲字符
& & & & & & StringBuffer sb=new StringBuffer(&&);
& & & & & & S
& & & & & & while((line=br.readLine())!=null){
& & & & & & & & sb.append(line);
& & & & & & }
& & & & & & br.close();//关闭缓冲流
& & & & & & result=sb.toString();//转换成字符
& & & & & & System.out.println(&result = & + result);
& & & & } catch (Exception e) {
& & & & & & e.printStackTrace();
& & & & } &
& & & & & &
&通过getData()方法获取发送的字符流即JSON字符串
&接下来对json字符串进行解析
&首先我们来分析一下这个json字符串的特点
&{&data&:[{&id&:&12345&,&name&:&张三&},{&id&:&54321&,&name&:&李四&}]}
&可以发现它符合这样一个类型{key : value}即JSonObject类型
&通过这样的方法把它转为JSONObject&
&JSONObject jsonObject = JSONObject.fromObject(jsonStr);
&在这里会出现两种情况,知道key值和不知道key值。
&第一种知道Key我们可以根据key值直接取value
& & &String msg = jsonObject.getString(&data&).toString();
&取出来的结果即为:
&[{&id&:&12345&,&name&:&张三&},{&id&:&54321&,&name&:&李四&}]
第二种在不知道key值的情况取值,用到了迭代器
& & for (Iterator&?& iter = jsonObject.keys(); iter.hasNext();) {
& & & & String key = (String) iter.next();
& & & & String value = jsonObject.get(key).toString();
& & & & System.out.println(key + &/& + value);
& & & & map.put(key, value);
&这里的key和value
&分别对应data、[{&id&:&12345&,&name&:&张三&},{&id&:&54321&,&name&:&李四&}]
&接下来我们再分析一下取出来的value值
&不难发现它是一个JSonArray类型
&我们用for循环来遍历这个jsonarray
&在这里同样有两种情况,知道key值和不知道key值
&知道key值直接根据key取即可,不知道则利用迭代器,至于迭代器不做详细介绍
for (int i = 0; i & jsonArray.size(); i++) {
& & jsonObject = jsonArray.getJSONObject(i);
& & & & Map&String, String& map = new HashMap&String, String&();
& & & & for (Iterator&?& iter = jsonObject.keys(); iter.hasNext();) {
& & & & & & String key = (String) iter.next();
& & & & & & String value = jsonObject.get(key).toString();
& & & & & & System.out.println(key + &/& + value);
& & & & & & map.put(key, value);
& & & & //这里是知道key值,直接取数据
& & & & //String name = jsonObject.getString(&name&).toString();
& & & & //String id = jsonObject.getString(&id&).toString();
& & & & //
& & & & //System.out.println(name + &/& + id);
&PS:我们这里传过来的JSON数据类型为JSonObject,有时也会传过来JSonArray类型
&JSONArray jsonArray = JSONArray.fromObject(jsonStr);
&只需转换为JsonArray即可。针对移动端的java服务器,接收和json返回数据
本人新手,刚参加工作,前段时间让我写安卓服务端,java语言,使用的是SSH框架,去百度谷歌,不过这方面的好像不是太多(也可能是我没发现)。
----------------------------------------------------
使用http协议,安卓那边的代码我不太懂,不过在我本机上测试代码的时候 我是使用http请求,以get方式提交。可以调用。
再说我的服务端,Struts+spring+hibernate,传输的是json数据。
剩下的不多说,见代码;
这是我的BaseAction,用于接收json数据:import com.opensymphony.xwork2.ActionS
import java.io.BufferedR
import java.io.IOE
import java.io.PrintW
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpS
import net.sf.json.JSONO
import net.sf.json.JSONS
import org.apache.struts2.ServletActionC
public class BaseAction extends ActionSupport {
private static final long serialVersionUID = 1L;
public HttpServletRequest getRequest() {
return ServletActionContext.getRequest();
public HttpServletResponse getResponse() {
return ServletActionContext.getResponse();
public HttpSession getSession() {
return getRequest().getSession();
public HttpSession getSession(boolean create) {
return getRequest().getSession(create);
public PrintWriter createPrintWriter() {
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("application/x-charset=utf-8");
PrintWriter out =
out = ServletActionContext.getResponse().getWriter();
} catch (IOException e) {
e.printStackTrace();
public JSONObject readJsonObject() {
BufferedReader reader =
JSONObject json =
String value =
reader = getRequest().getReader();
value = reader.readLine();
} catch (IOException e) {
e.printStackTrace();
json = (JSONObject) JSONSerializer.toJSON(value);
String jsonString = json.getString("jsonString");
JSONObject jsonObject = JSONObject.fromObject(jsonString);
return jsonO
}UserActionimport java.sql.T
import net.sf.json.JSONO
import org.springframework.beans.factory.annotation.A
import org.springframework.context.annotation.S
import org.springframework.stereotype.C
import com.yuxu.common.MD5U
import com.yuxutech.biz.IUserB
import com.yuxutech.pojo.BuyerE
import com.yuxutech.pojo.R
import com.yuxutech.pojo.U
@Scope("prototype")
@Controller
public class UserAction extends BaseAction {
private static final long serialVersionUID = 1L;
private boolean flag =
private String info =
private String message =
private boolean isSuccess =
private User user =
@Autowired
private IUserBiz userB
public String register() {
String name =
String password =
String address =
String phone =
String email =
String mac =
String areaId =
String role =
JSONObject detail = readJsonObject();
name = detail.getString("name");
password = detail.getString("password");
address = detail.getString("address");
phone = detail.getString("phone");
email = detail.getString("email");
mac = detail.getString("mac");
areaId = detail.getString("areaId");
role = detail.getString("role");
} catch (Exception e) {
e.printStackTrace();
this.flag =
this.message = "Input type error!";
return "success";
if ((name.length() & 20) || (name.length() & 4)) {
this.info = "用户名长度为4-20位!";
this.isSuccess =
return "success";
if ((password.length() & 20) || (password.length() & 4)) {
this.info = "密码长度为4-20位!";
this.isSuccess =
return "success";
User user = new User();
user.setId(Integer.valueOf(this.userBiz.getMaxId() + 1));
user.setName(name);
user.setPwd(MD5Util.getMD5(password));
user.setAddress(address);
user.setPhone(phone);
user.setEmail(email);
user.setRole(new Role(Integer.parseInt(role)));
user.setArea(areaId);
user.setState(Integer.valueOf(1));
BuyerExt buyerExt = new BuyerExt();
buyerExt.setMac(mac.replaceAll(":", ""));
buyerExt.setRegTime(new Timestamp(System.currentTimeMillis()));
buyerExt.setUser(user);
user.getBuyerExts().add(buyerExt);
String result = this.userBiz.register(user);
if (result.equals("注册成功!")) {
this.isSuccess =
this.info =
this.user = this.userBiz.findUserByName(name);
return "success";
this.isSuccess =
this.info =
this.user =
return "success";
} catch (Exception e) {
e.printStackTrace();
this.flag =
this.message = "System error!";
return "success";
public String validPwd() {
System.out.println("------------validPassword-------------");
int userId = 0;
String password =
JSONObject jsonObject = super.readJsonObject();
userId = jsonObject.getInt("userId");
password = jsonObject.getString("password");
} catch (Exception e) {
e.printStackTrace();
this.flag =
this.message = "input type error!";
return "success";
boolean isValid = this.userBiz.validPwd(userId,
MD5Util.getMD5(password));
if (isValid) {
this.info = "密码正确,验证成功!";
this.isSuccess =
this.info = "密码错误,请重新输入!";
this.isSuccess =
return "success";
} catch (Exception e) {
e.printStackTrace();
this.flag =
this.message = "system error!";
return "success";
public String getInfo() {
return this.
public String getMessage() {
return this.
public User getUser() {
return this.
public boolean isFlag() {
return this.
public boolean getIsSuccess() {
return this.isS
下面的struts配置文件(部分代码),&package name="user" extends="json-default" namespace="/user"&
&!-- 用户注册 --&
&action name="register" class="userAction" method="register"&
&result type="json"&
&param name="includeProperties"&
isSuccess,
user\.address,
user\.name,
user\.phone,
user\.email,
user\.area
&!-- 获取区域列表 --&
&action name="getAreas" class="areaAction"&
&result type="json"&
&param name="includeProperties"&
detail\[\d+\]\.id,
detail\[\d+\]\.name,
detail\[\d+\]\.pid
不过现在并没有加密,只是初期的代码,以后还会继续上传加密之后的,当然如果你现在有更好的方法,请留言,多多交流!
原始地址:
移动端(安卓、IOS)请求Java服务器时的接受数据问题
java为移动端写接口开发实例
Servlet解析JSON数据和发送JSON数据
没有更多推荐了,

我要回帖

更多关于 java解析多层嵌套json 的文章

 

随机推荐