1.抽象类JSON
常见的方法:
toJSONString();//对象转String
parseObject();//string转object
parseArray(); //sting转数组
//使用小技巧
//组合使用可以避免传出不必要的数据,value为null的数据
//JSONObject还可以通过属性名获取value值
demo
//public class JSONObject extends JSON
//JSONObject 是建值对形式
public static void main(String[] args) {
User user = new User();
user.setId(1);
// user.setSex("man");
user.setUsername("Tison");
// user.setAddress("address");
user.setBirthday(new Date());
user.setAge("1");
System.out.println("1:" + JSONObject.toJSONString(user));
System.out.println("2:" + JSONObject.parseObject(JSON.toJSONString(user)));
System.out.println("3:" + JSON.parseObject(JSON.toJSONString(user)));
JSONObject jsonObject2 = JSON.parseObject(JSON.toJSONString(user));
JSONObject jsonObject = JSONObject.parseObject(JSON.toJSONString(user));
System.out.println("4:" + jsonObject2.getString("username"));
System.out.println("5:" + jsonObject2.get("username"));
System.out.println("6:" + jsonObject.getString("username"));
List<User> kk = new ArrayList<>();
kk.add(user);
System.out.println("7:" + JSONObject.toJSONString(kk));
//通过json转数组去掉一些无用的键值对
System.out.println("8:" + JSON.parseArray(JSONObject.toJSONString(kk)));
System.out.println("9:" + JSONObject.parseArray(JSONObject.toJSONString(kk)));
}
@Data
public class User implements Serializable {
private static final long serialVersionUID = 8843535271490853414L;
private Integer id;
@Nullable
/**
* 用户姓名
*/
private String username;
@NotNull
/**
* 性别
*/
private String sex;
private String age;
/**
* 生日
*/
private Date birthday;
private int nickName;
private String lll;
}
结果:
补充:
fastjson作为一款序列化引擎,不可避免的会遇到循环引用的问题,为了避免StackOverflowError异常,fastjson会对引用进行检测。
如果检测到存在重复/循环引用的情况,fastjson默认会以“引用标识”代替同一对象,而非继续循环解析导致StackOverflowError。
解决办法1
关闭检查:
JSON.toJSONString(object, SerializerFeature.DisableCircularReferenceDetect);
public enum SerializerFeature {
QuoteFieldNames,
/**
*
*/
UseSingleQuotes,
/**
*
*/
WriteMapNullValue,
/**
* 用枚举toString()值输出
*/
WriteEnumUsingToString,
/**
* 用枚举name()输出
*/
WriteEnumUsingName,
/**
*
*/
UseISO8601DateFormat,
/**
* @since 1.1
*/
WriteNullListAsEmpty,
/**
* @since 1.1
*/
WriteNullStringAsEmpty,
/**
* @since 1.1
*/
WriteNullNumberAsZero,
/**
* @since 1.1
*/
WriteNullBooleanAsFalse,
/**
* @since 1.1
*/
SkipTransientField,
/**
* @since 1.1
*/
SortField,
/**
* @since 1.1.1
*/
@Deprecated
WriteTabAsSpecial,
/**
* @since 1.1.2
*/
PrettyFormat,
/**
* @since 1.1.2
*/
WriteClassName,
/**
* @since 1.1.6
*/
DisableCircularReferenceDetect, // 32768
/**
* @since 1.1.9
*/
WriteSlashAsSpecial,
/**
* @since 1.1.10
*/
BrowserCompatible,
/**
* @since 1.1.14
*/
WriteDateUseDateFormat,
/**
* @since 1.1.15
*/
NotWriteRootClassName,
/**
* @since 1.1.19
* @deprecated
*/
DisableCheckSpecialChar,
/**
* @since 1.1.35
*/
BeanToArray,
/**
* @since 1.1.37
*/
WriteNonStringKeyAsString,
/**
* @since 1.1.42
*/
NotWriteDefaultValue,
/**
* @since 1.2.6
*/
BrowserSecure,
/**
* @since 1.2.7
*/
IgnoreNonFieldGetter,
/**
* @since 1.2.9
*/
WriteNonStringValueAsString,
/**
* @since 1.2.11
*/
IgnoreErrorGetter,
/**
* @since 1.2.16
*/
WriteBigDecimalAsPlain,
/**
* @since 1.2.27
*/
MapSortField;
SerializerFeature(){
mask = (1 << ordinal());
}
public final int mask;
}
2.忽略制定属性
@JSONField(serialize = false) 设置为false,默认为true,
public class CommonAttribute implements Serializable {
private static final long serialVersionUID = 3672838928138280162L;
/**
* 属性名
*/
private String attrKey;
/**
* 属性值
*/
@JSONField(serialize = false)
private String attrValue;
/**
* 属性值(多选)
*/
private List<String> attrValues;
/**
* 数据库中的字段名
*/
@JSONField(serialize = false)
private String attrDbKey;
/**
* 属性中文名
*/
@JSONField(serialize = false)
private String attrKeyZh;
public static void main(String[] args) {
CommonAttribute attribute = new CommonAttribute();
attribute.setAttrValues(Arrays.asList("df"));
attribute.setAttrValue("aa");
attribute.setAttrKeyZh("vv");
System.out.println(JSON.toJSON(attribute));
System.out.println(JSONObject.toJSON(attribute));
}
}