問題描述:
白天,前端同事跑過來說,你的接口返給前端的是一堆帶斜槓轉義字符的數據,數據格式未處理哦?然後,仔細一看果然,晃眼。。
具體數據內容不再描述,大致格式如下:
"[{\"birthday\":\"2000\",\"major\":[\"挖掘機\",\"炒菜\"],\"name\":\"xiaoming\",\"comment\":\"hello world\",\"age\":25.2,\"status\":0}]";
這樣的數據格式確實不便於前端接收處理,我們希望的是能夠輸出正常的json格式數據,網上百度了下。
解決方案:
【1】字符串方法:replace();
測試程序:
@Test
public void fun1(){
String data = "[{\"birthday\":\"2000\",\"major\":[\"挖掘機\",\"炒菜\"],\"name\":\"xiaoming\",\"comment\":\"hello world\",\"age\":25.2,\"status\":0}]";
String result = data.replace("\"", "");
System.out.println(result);
}
測試結果:
[{birthday:2000,major:[挖掘機,炒菜],name:xiaoming,comment:hello world,age:25.2,status:0}]
【2】配置一個序列化類,fastjson數據處理
字符串轉換配置類:
/**
* fastjson轉義字符處理Utils
*/
public class StringToJsonSerizlizerConfig implements ObjectSerializer {
@Override
public void write(JSONSerializer jsonSerializer, Object o, Object o1, Type type, int i) throws IOException {
jsonSerializer.write(JSONObject.parseObject(o.toString()));
}
}
這個配置類,在我們測試程序中自定義一個序列化的局部變量,並通過JSONField註解賦給這個變量序列化屬性。
@JSONField(serializeUsing = StringToJsonSerializer.class)
測試程序:
@Test
public void fun2(){
String data = "[{\"birthday\":\"2000\",\"major\":[\"挖掘機\",\"炒菜\"],\"name\":\"xiaoming\",\"comment\":\"hello world\",\"age\":25.2,\"status\":0}]";
jsonFromatTemplate = data;
System.out.println(jsonFromatTemplate);
}
測試結果:
[{"birthday":"2000","major":["挖掘機","炒菜"],"name":"xiaoming","comment":"hello world","age":25.2,"status":0}]
【3】JSONObject轉換
當然,如果嫌第二種麻煩,也可以直接這樣轉:
Object json = JSONObject.toJSON(/*需要序列化的對象*/); //格式化轉義字符\
String json = JSONObject.toJSON(/*需要序列化的對象*/); //產生轉義字符\
測試程序:
@Test
public void fun3(){
String data = "[{\"birthday\":\"2000\",\"major\":[\"挖掘機\",\"炒菜\"],\"name\":\"xiaoming\",\"comment\":\"hello world\",\"age\":25.2,\"status\":0}]";
Object o = JSONObject.toJSON(data);
System.out.println(o.toString());
}
測試結果:
[{"birthday":"2000","major":["挖掘機","炒菜"],"name":"xiaoming","comment":"hello world","age":25.2,"status":0}]