这几天做项目和前端的大神发生了一点争执,原因就在于json的格式上面。
于是我们就愤愤不平的开始争论,然后就去json的官网查资料,又去验证了我给他的json的字符串。
json的官网上是这么说的:
JSON is built on two structures:
- A collection of name/value pairs. In various languages, this is realized as an object, record, struct, dictionary, hash table, keyed list, or associative array.
- An ordered list of values. In most languages, this is realized as an array, vector, list, or sequence.
基本上对于Java来说,第一条指的就是对象,哈希表之类的,第二条指的是数组,向量或者序列等。
下面公布一下我给他的json格式(这个是修改过的,原版是错的):
[{"clwdList":[[1,1],[1,2],[1,3]],"hjwdList":[[1,0],[1,1],[1,2]],"dcdyList":[[2,0],[2,1],[2,2]],"maxTemp":3,"minTemp":1}]
我们主要纠结的就是最外面的那一层中括号了。
我使用Gson来对JavaBean进行处理,将其转换为Json格式的String字符串。
这里我贴一下我的JavaBean代码:
public class JsonWdTt { private ArrayList<ArrayList> clwdList; private ArrayList<ArrayList> hjwdList; private ArrayList<ArrayList> dcdyList; private int maxTemp; private int minTemp; public int getMinTemp() { return minTemp; } public void setMinTemp(int minTemp) { this.minTemp = minTemp; } public int getMaxTemp() { return maxTemp; } public void setMaxTemp(int maxTemp) { this.maxTemp = maxTemp; } public ArrayList<ArrayList> getClwdList() { return clwdList; } public void setClwdList(ArrayList<ArrayList> clwdList) { this.clwdList = clwdList; } public ArrayList<ArrayList> getHjwdList() { return hjwdList; } public void setHjwdList(ArrayList<ArrayList> hjwdList) { this.hjwdList = hjwdList; } public ArrayList<ArrayList> getDcdyList() { return dcdyList; } public void setDcdyList(ArrayList<ArrayList> dcdyList) { this.dcdyList = dcdyList; } }
实际上,我当时写这个的时候,考虑了他可能有多条这样的重复数据,于是最外面是一个ArrayList,接收的是JsonWdTt类型对象,由于ArrayList没有封装成JavaBean,所以生成的数组是没有名字的,但是实际上最终只接收到了一个对象,也就是说数组的长度为1,所以最外面一层就有奇葩的中括号了,但是这种写法是可以通过json格式测试的,所以我又变得有理有据,可以和他争上一番。总而言之,这样的写法还是不规范的,所以我最后又修改了一下,代码如下:
public class JsonWdTtList { private HashMap<String, JsonWdTt> jsonWdTtList; public HashMap<String, JsonWdTt> getJsonWdTtList() { return jsonWdTtList; } public void setJsonWdTtList(HashMap<String, JsonWdTt> jsonWdTtList) { this.jsonWdTtList = jsonWdTtList; } }
用这个来封装所有单个的JsonWdTt对象,最后得到的Json字符串格式就是:
json_str为 {"jsonWdTtList":
{"jsonWdTt1":{"clwdList":[[1,1],[1,2],[1,3]],"hjwdList":[[1,0],[1,1],[1,2]],"dcdyList":[[2,0],[2,1],[2,2]],"maxTemp":3,"minTemp":1,"name":"jsonWdTt1"},
"jsonWdTt2":{"clwdList":[[1,1],[1,2],[1,3]],"hjwdList":[[1,0],[1,1],[1,2]],"dcdyList":[[2,0],[2,1],[2,2]],"maxTemp":3,"minTemp":1,"name":"jsonWdTt2"}}}
这样写就比较好了,如果我们想要在前端使用的话,需要这样写:
json_str.jsonWdTtList.jsonWdTt1.clwdList[0][0] //访问第一个对象的第一个二维数组的第一个元素,得到1
今天写的有点乱,因为写博客的时候又发现了问题,然后又修改,得到了这个版本。
总而言之,用javabean来生成json数据的时候一定要理清楚层次关系,不然很容易出现问题。
另外就是前后台一定要沟通好,不然就会出现我们这种问题,你给的不是他想要的,最后就吵起来了。