在java開發中,大家經常會遇到把一個對象轉換成string問題,一般用到的幾種方式toString,強制轉換(String),String.valueOf這三種方式,但具體這三種方式有什麼區別,大家知道嗎?由於這個不是本文討論的重點,找個篇博客,寫的挺簡單易懂的,不太清楚的大家可以看一下
鏈接:https://blog.csdn.net/sunzhenhua0608/article/details/8014060
上面說了那麼多廢話,現在我們開始討論本博客的主題"對象轉string與jsonString的區別"
先說區別:
在實現方面看:jsonString是通過流的方字打印出文本字符串,在String類型進行操作的時候會拆分爲char類型循環添加\\來防止轉譯字符轉譯的,不同的類型會做不同的預處理,java的toStirng一般都是拼接的字符串,無特殊預處理
外管上看:jsonString在按照文本一模一樣打印的,如果只實例化了對象,對象本身沒有默認值的情況下返回 {}; string是對對象進行拼接操作,會按照java規範進行轉移等編譯
jsonString 代碼分析:使用的jar包 alibaba.fastjson
調用轉源碼包的過程
//json轉string方法,JSON.toJSONString(object)
public static String toJSONString(Object object) {
return toJSONString(object);
}
//實際處理類
public static String toJSONString(Object object, SerializerFeature... features) {
//繼承了Writer
SerializeWriter out = new SerializeWriter();
try {
//
JSONSerializer serializer = new JSONSerializer(out);
SerializerFeature[] var4 = features;
int var5 = features.length;
for(int var6 = 0; var6 < var5; ++var6) {
SerializerFeature feature = var4[var6];
serializer.config(feature, true);
}
serializer.write(object);
String var11 = out.toString();
return var11;
} finally {
out.close();
}
}
public final void write(Object object) {
if (object == null) {
this.out.writeNull();
} else {
Class<?> clazz = object.getClass();
//根據object的類型,走不同的實例化類
ObjectSerializer writer = this.getObjectWriter(clazz);
try {
//writer對象的
writer.write(this, object, (Object)null, (Type)null, 0);
} catch (IOException var5) {
throw new JSONException(var5.getMessage(), var5);
}
}
public final void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException {
SerializeWriter out = serializer.getWriter();
if (object == null) {
if (out.isEnabled(SerializerFeature.WriteNullListAsEmpty)) {
out.write("[]");
} else {
out.writeNull();
}
} else {
Object[] array = (Object[])((Object[])object);
int size = array.length;
SerialContext context = serializer.getContext();
serializer.setContext(context, object, fieldName, 0);
try {
out.append('[');
for(int i = 0; i < size; ++i) {
if (i != 0) {
out.append(',');
}
Object item = array[i];
if (item == null) {
out.append("null");
} else if (item.getClass() == this.componentType) {
this.compObjectSerializer.write(serializer, item, i, (Type)null, 0);
} else {
ObjectSerializer itemSerializer = serializer.getObjectWriter(item.getClass());
itemSerializer.write(serializer, item, i, (Type)null, 0);
}
}
out.append(']');
} finally {
serializer.setContext(context);
}
}
}