前言
最近用Retrofit+fastjson进行JSON数据的实体化编程。对碰到的问题做个记录。
附赠工具:
先提供个JSON在线网站:http://www.bejson.com/ 还是挺好用的,够简洁
请先看段JSON
片段一:
{
"animals":{
"dog":[
{"name":"Rufus","breed":"labrador","count":1,"twoFeet":false},
{"name":"Marty","breed":"whippet","count":1,"twoFeet":false}
],
"cat":{"name":"Matilda"}
},
"anim_type":"thpe"
}
问题一: 仔细看animals跟anim_type跟dog标签有什么区别?
他们都是key,仅仅是具体的value不一样
问题二:这三个标签的value有什么区别?
朋友们,一般来说,JSON也就这么几个符号,{} [] ""
{}代表的是 类,[]代表的是数组,""代表的字符串
问题三:如果这三个标签混用会怎么用?比如我们将anim标签改成了 "animales":"{[xxxxxxxx]}"
我们暂不管xxxx是什么内容,可以看得出来用""扩上后,自然就变成了字符串。
那么,这里就不再是一个对象,也不会是一个数组,而是一个字符串。
问题四:如何才能保证JSON数据解析的快速正确无误?
1. 服务端必须要有使用工具进行解析,比如JSONFormat,BeJSON,拒绝手动编写,稳定的后端JSON格式输出是关键
2. 使用实体化编程。前后端统一才能彻底解决问题。
问题五:博主你说这些有毛用?
在JSON编写中,乃至整个程序的其他编码过程中,实体化是非常有必要的。(为什么有必要就不讨论了,自己体会)
这里我要说的是 意图
一个良好的编码习惯,最少要能让编写意图 跟 编写结果 保持一致。
这里{}是对象,"{}"就是字符串,当你用"" 去扩 {},那是 将 对象 改变成 字符串。 这显然是编程意图的不明确导致。
表面上看,一点问题都没有,实际上,确确实实的违背了数据格式在设计时的初衷。。。
现在再来看一份以上JSON转换的对象
代码1:
package com.besjon.pojo;
public class JsonRootBean {
private Animals animals;
private String anim_type;
public void setAnimals(Animals animals) {
this.animals = animals;
}
public Animals getAnimals() {
return animals;
}
public void setAnim_type(String anim_type) {
this.anim_type = anim_type;
}
public String getAnim_type() {
return anim_type;
}
}
代码2:
package com.besjon.pojo;
public class Dog {
private String name;
private String breed;
private int count;
private boolean twoFeet;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setBreed(String breed) {
this.breed = breed;
}
public String getBreed() {
return breed;
}
public void setCount(int count) {
this.count = count;
}
public int getCount() {
return count;
}
public void setTwoFeet(boolean twoFeet) {
this.twoFeet = twoFeet;
}
public boolean getTwoFeet() {
return twoFeet;
}
}
代码3:
package com.besjon.pojo;
public class Cat {
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
代码4:
package com.besjon.pojo;
import java.util.List;
public class Animals {
private List<Dog> dog;
private Cat cat;
public void setDog(List<Dog> dog) {
this.dog = dog;
}
public List<Dog> getDog() {
return dog;
}
public void setCat(Cat cat) {
this.cat = cat;
}
public Cat getCat() {
return cat;
}
}
最后,看个有趣的东西,谁能告诉我有什么区别?
大家看看这两图。小区别。有大变化。使用fastJSON的解析完全不一样。