一、首先我想在某一方法中return多个值
情景:将一个方法中多次post的结果都返回,后来我想到的是将每一次的请求的结果(Json数据类似下面的例子)放在一个Map里面,然后将这个Map再序列化,然后返回序列化结果就OK了。
然后就导致了,返回的结果是这样的:(被转义了(ps:这不是我想要的那种结果))
所以就有了下面的话题:
ps:附如何建一个Java工程,及运行(主要是用于测试的,我实际项目是javaWeb项目)
二、解决返回值被转义问题
之前有过一篇介绍C#使用字典如何拼接并反序列化的将Json数据(带数组)的数据进行拼接
这里用Java实现。
还是拼接成这样的数据,然后打打印出来
发现被转义了;找原因
最后发现这个没有将map数据toString
将其toString以后就不会被转义了
将这两个map和map.toString()打印出来发现信息是一样的(是不是很神奇)
我先将Map对象直接打印和map.toString打印结果也是一样的 没明白为什么会这样
问:
java里面直接打印对象是可以出现对象的字符串的值,但是C#却是对象地址
答:因为Java里面的HashMap重写了toString方法
见下图:
问:
那map1只有在map1.toString()之后才会拼接成key=value格式字符串才对,为啥打印map1也是出来key=value格式字符串
答:
toString这个方法是自动执行的
也就是你有没有调toString他都会自己调
问:
我自己在这个类中重写一个toString()方法,为啥map.toString没有走?
答:
map实际上是HashMap的对象,他走的是HashMap的toString,不会走你这个类重写的toString
父类Object的toString方法的对象就是返回对象地址,这就和C#一样一样了
ps:有时候解决问题就是像破案,很多理论知识还得自己多思考
拼接demo如下:
package com.cn;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class JsonToStr {
public static void main(String[] args)
{
JsonToStr jt=new JsonToStr();
String result=jt.dataToJson();
}
public String dataToJson()
{
Map<String,String> ma1=new HashMap<String,String>();
ma1.put("name", "Google");
ma1.put("url", "http://www.google.com");
List<Map<String,String>> ma2=new ArrayList<>();
ma2.add(ma1);
JSONArray maMap=JSONArray.fromObject(ma2);//.fromObject(ma2);
String links=maMap.toString();//数组序列化
Map<String,String> ma=new HashMap<String,String>();
ma.put("name", "BeJson");
ma.put("url", "http://www.bejson.com");
ma.put("links", links);
JSONObject maMap1=JSONObject.fromObject(ma);
String msStr=maMap1.toString();
Map<String,String> map1=new HashMap<String,String>();
map1.put("jsonStr", msStr);
map1.put("id","\"zh2789\"");
System.out.println("map1:"+map1);
JSONObject map1Map=JSONObject.fromObject(map1);
String result=map1Map.toString();
System.out.println("没有将map1使用toString方法返回的结果为:"+result);
System.out.println();
System.out.println("map1.toString():"+map1.toString());
JSONObject maPMap=JSONObject.fromObject(map1.toString());
String result2=maPMap.toString();
System.out.println("先将对象toString,然后再序列化:"+result2);
return result;
}
}
三、ps:在MyEclipse里面创建一个Java工程
1、新建一个Java工程
2、给项目去一个名字(这个过程直接点击finish也一样)
3、finish项目
4、找到我们新建的项目,然后添加Java类此时的目录
5、选中src,右键
然后就可以写方法咯。
四、ps:并导入外部jar包,因为我的这个序列化jar包依赖太多,就不推荐了,主要介绍步骤
打开本地的刚新建的工程目录,发现没有lib目录
web项目是有WebContent目录的,WebContent下面的lib下面就是jar包,但是Java工程里面没有lib
1、先将鼠标移到项目上,右键先新建一个文件夹,并取名为lib
2、此时的项目结构:
3、通过复制粘贴方式将外部的jar包粘贴到lib下面(ps在D盘下操作,
而不是直接在MyEclipse中粘贴)
4、添加完成后,选中这个项目,选择Build Path ——> Configure Build Path
五:ps运行Java工程,web项目是需要启动tomcat 的这个不需要
1、选中java项目单击右键->run as->java application(类中必须要有main方法)
2、运行以后发现缺少jar包,循环四jar包添加步骤
六、PS:将List数组序列化问题
我的jar包里面已经有将数组序列化的方法,所以直接用即可,不过推荐阿里的FastJson.jar比较好用