java里的JSONObject作用是啥?啥时候用?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java里的JSONObject作用是啥?啥时候用?相关的知识,希望对你有一定的参考价值。
在项目中的action层 有时后会用到JsonObject来往页面传,这个跟request。setattribute有啥区别,或者struts2里的直接定义参数和对象 有啥区别?
补充问题:比如用的是Struts1 在Action类 一般都用request。setAttribute(list<T>)
用的是Struts2 直接在Action类定义private List<T> list 页面直接可以接收到这个list
问题是:为啥有的项目里非要用JsonObject来
JSONObject json = JSONObject.fromObject(list);
System.out.println(json.toString()); //结果为:"name":"hzucmj","age":22??有啥区别
JsonObject 就是常说的 json。是一种重要的数据传输对象。其格式为"key1":value1,"key2",value2....;key 必须是字符串。
因为ajax请求不刷新页面,但配合js可以实现局部刷新,因此json常常被用来作为异步请求的返回对象使用。
通过response.getWriter()获取PrintWriter pw,然后pw.print(json)。如果没有设置response.setContentType("application/json; charset=utf-8"); 则需要自己再js中进行解析。
扩展资料
Java中交互方式分为同步和异步两种:
同步交互:指发送一个请求,需要等待返回,然后才能够发送下一个请求,有个等待过程;
异步交互:指发送一个请求,不需要等待返回,随时可以再发送下一个请求,即不需要等待。
区别:一个需要等待,一个不需要等待,在部分情况下,项目开发中都会优先选择不需要等待的异步交互方式。
比如银行的转账系统,对数据库的保存操作等等,都会使用同步交互操作,其余情况都优先使用异步交互。
JsonObject 就是常说的 json。
是一种重要的数据传输对象。
其格式为"key1":value1,"key2",value2....;key 必须是字符串。
很像map对不对,一个key,一个value。
因为ajax请求不刷新页面,但配合js可以实现局部刷新,因此json常常被用来作为异步请求的返回对象使用。
通过response.getWriter()获取PrintWriter pw,然后pw.print(json)。
如果没有设置response.setContentType("application/json; charset=utf-8");
则需要自己再js中进行解析。
举例说明:
response.setContentType("application/json; charset=utf-8");PrintWriter pw = response.getWriter();
Student s = new Student(。。。);//反正就是构造一个对象,有没有数据无所谓
JSONObjet json = JSONObjet .from(s);//将s转化成json对象。
pw .print(json);
pw .flush();
pw .close();
这样这个json对象就传到你发送请求的那个jsp上面。
而$.post(url,datas.function(data))这里的data就是后台返回的值,也就是这里的json
只需要 var json = data;//就获取到了。
再取得原来Student的属性 var name = json.name(student 的name 属性);
比较request.setAttribute("key",value);
这个必须配合forwoar来转发跳转到需要这个value的jsp页面。页面刷新。
是不是一般在页面的js里把几个属性(如name,age) 定义成:var student= "'name':'" + name+ "','age':'" + age+"'";然后在$.post(student);往action传,action里
Student stu= JSON.parseObject(student, Student .class);获取的情况多啊?
也行。只要是json格式,并在后台能解析出来。一般单纯的传值都可以用。主要还是看具体效果。
但也有很多必须要求表单提交的。
但我还是没理解 ,你说的异步。比如后台list对象 为啥非要用json定义成map形式的,而不是直接把list传页面 在form或者select里解析这个list也不是可以吗?没理解你说的异步。麻烦你了
追答不是定义。是像。
json 的数据格式就是这样。不遵从,就出错。但它不是map。只是格式像。
还有异步:
异步就是在当前页面不动的情况下,通过js往服务器发送请求。如果有页面跳转,也是通过js跳的。
不论 forward 还是 redirect 都要求刷新页面才能把数据在页面上显示出来。而 异步请求不需要刷新,只需要js局部更新。
请 自行学习 juqery 的 $.post 的作用( 其他的我觉得不好用)
json 去官网看。jar包 api 看可能。我上面讲的json 使用只是很简单的。
说点常见的异步请求的例子:
你去某个网站注册账户,要求你填个邮箱?名字不管什么。有没有碰到刚刚填完填下一个的时候,上面突然冒出一个提示 说 该什么什么已被使用。明显的数据都在,页面没刷新,但是不知不觉就请求了服务器完成了一系列的逻辑。这就是 异步请求。
问题补充了
追答JSONObject json = JSONObject.fromObject(list);这个可以方便的将一个类对象转化成字符串并返回到前台!
你总不能返回一个java对象到前台去吧,js可不认识java对象。而json对象是java和js都认识的
你们使用request.setAttribute()是同步返回数据吧?如何同步或者异步返回页面数据与数据结构没有关系。如果是同步返回数据,就使用request.setAttribute("key",jsonObject),如果是异步返回数据就使用流方式把jsonObject.toString 返回给页面。
我觉得使用JSONObject的好处就是可以减少自己定义的bean。在页面上也可以类似于对象的形式使用返回的数据。
对于你的第二个问题,如果我理解了你的意思,我觉得struts2 的属性驱动(直接定义参数使用get set方法获取参数)和模型驱动(使用bean 来获取参数)和JSONObject更不相干了,两者没关系的。追问
userInfo.setUsername("张");userInfo.setPassword("123456");
JSONObject json = JSONObject.fromBean(userInfo);我就很不理解 那这里为什么他非要最后创建jsonObject呢,直接往页面传userInfo不行吗?而且页面直接可以用$userInfo。name多方便
如果可以,能把代码贴全一点。
因为看不到全部的代码,我猜测这个json最后转换成了String然后用异步方式传到了页面上。
比如页面使用Ajax请求的,需要异步返回数据,那就要把userInfo 转换成字符串返回给页面。使用JSONObject 的toString 方法可以方法把对象转成json格式的字符串。
如果是同步请求返回数据,bean 对象和JSONObject是一样的,没有转换的必要。
java formatter是啥,有啥作用,怎么用?
java.util.Formatter 是JDK1.5新增的类库,功能很强大,主要用来格式化文本的。格式化主要用在文本输出方面,比如,数字、日期、金额等,还有类似超市的购物单小票等等,都会用到格式化输出的工具。在此类没出现之前,只能通过空格缩进或这个制表符来对单据等格式做一些控制,现在只要掌握java.util.Formatter,就可以熟练应用了 。
举例如下:
import java.util.Calendar;
import java.util.Formatter;
import java.util.GregorianCalendar;
/**
* Formatter测试
*
* @author leizhimin 2009-7-16 16:31:02
*/
public class TestFormatter
public static void main(String[] args)
//%[argument_index$][flags][width][.precision]conversion
Formatter f1 = new Formatter(System.out);
//格式化输出字符串和数字
f1.format("格式化输出:%s %d", "a", 1235);
System.out.println("\\n--------");
//日期的格式化
Calendar c = new GregorianCalendar();
f1.format("当前日期:%1$tY-%1$tm-%1$te", c);
System.out.println("\\n--------");
//日期的格式化,并将格式化结果存储到一个字符串变量中
String s = String.format("当前日期:%1$tY-%1$tm-%1$te", c);
System.out.println(s);
//2$:取第二个参数
//-: 指定为左对齐,默认右对齐
//5:最大输出宽度为20,不够会补空格,实际若超过则全部输出
//.2:在此表示输出参数2的最大字符数量,如果是浮点数字,则表示小数部分显示的位数
//s :表示输入参数是字符串
f1.format("%2$-5.2s %1$2s", "123", "456");
//将格式化的结果存储到字符串
System.out.println("\\n--------");
String fs = String.format("身高体重(%.2f , %d)", 173.2, 65);
System.out.println(fs);
//printf()本质上也是用System.out作为输出目标构造Formatter对象
//调用format方法,并将printf的参数传给format方法而得。
System.out.println("\\n--------");
System.out.printf("身高体重(%.2f , %d)", 180.2, 65);
运行结果:
格式化输出:a 1235
--------
当前日期:2009-07-16
--------
当前日期:2009-07-16
45 123
--------
身高体重(173.20 , 65)
--------
身高体重(180.20 , 65)
Process finished with exit code 0 参考技术A Formatter 是JAVA中用来格式化输出的类。
import java.io.*;
import java.util.*;
public class Turtle
private String name;
private Formatter f;
public Turtle(String name, Formatter f)
this.name =name;
this.f=f;
public void move(int x, int y)
f.format("%s The Turtle is at (%d ,%d)\n", name, x, y);
public static void main(String[] args)
printStream outAlias = System.out;
Turtle tommy=new Turtle("Tommy",
new Formatter(System.out));
Turtle terry = new Turtle("Terry",
new Formatter(outAlias));
tommy.move(0,0);
terry.move(4,8);
tommy.move(3,4);
terry.move(2,5);
tommy.move(3,3);
terry.move(3,3);
看懂这段你就明白了。本回答被提问者采纳 参考技术B Formatter是格式化定义类,类似于C语言的printf语句。可灵活控制字符串等的输出样式。直接看api doc就明白了。http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Formatter.html。
例:
在数字前加入正负号,然后转成字符串
String b = String.format("%+f", -3);
System.out.println("[y=2*x" + b + "]");
以上是关于java里的JSONObject作用是啥?啥时候用?的主要内容,如果未能解决你的问题,请参考以下文章
问一下,Java里的这个getRandString()函数是啥意思,我敲代码的时候出错了
数据库中 rollback 和 commit 是啥时候用的 作用是啥 有啥区别 举几个简单的