Json遇到引號需要轉義的問題

2021-08-16 23:51:53 字數 1833 閱讀 9673

首先看乙個簡單的json格式的資料:

,success:true}

當使用json資料向前端傳遞資料的時候,如果資料中出現引號的時候,如果不能轉義,那麼前台,就會獲取乙個錯誤的json格式的資料,例如有這麼乙個物件person:

class

person

public

void

setname(string name)

public

string getdesc()

public

void

setdecs(string decs)

}

如果有個person物件person,他的desc是 he is super man,他的name是jone

那麼如果我們需要將這個物件轉化為json資料傳遞給前台,那麼我們有很多種方法:

1,最靈活的方式,當然是拼接了:

stringbuffer buffer = new

stringbuffer();

return buffer.tostring();

這樣的話,前台拿到的資料就是,success:true} 這個當然沒問題;

但是如果在desc中出現引號,例如 he is 'super man',如果依舊採用上面這種方式,那麼拼接出來的資料是這樣子的:

,success:true}  這樣子的話,就不是標準的json格式的資料了,前台就不能正確的解析了。

ps,有人說,那大不了不用單引號,用雙引號作為json格式的拼接符,就可以了麼?那如果資料中是雙引號呢:,success:true}

甚至,如果在資料的末尾出現轉義斜槓\怎麼辦!,success:true}

這樣的話,第一中方式就不適用了,那麼可以看看下面這種:

2,使用序列化工具jsonserializer,需要jar包:flexjson.jar

person person = new

person();

person.setname("jone");

person.setdesc(

jsonserializer serializer = new

jsonserializer();

system.out.println(serializer.serialize(person));

這樣的話,序列化之後的資料是這樣的:

這樣的資料,已經被轉義過了,在前台就可以被正確的解析了。

但是這種方式靈活性比較差,

例如,如過前台需要的資料,除了desc,name兩個字段之外,還有需要person.address或者,其他需要處理的資料,那麼第二中方式也就不可以了,那麼可以採用下面這種方式:

3,使用jsonobject物件,這個需要jar包:ezmorph.jar,json-lib.jar,xom.jar

方式為:

hashmapmap = new hashmap(); 

map.put("name",person.getname());

map.put("decs",person.getdesc());

map.put("age",22);

map.put("home.address","street,road,china");

return jsonobject.fromobject(map).tostring();

這樣,結果為:,也是標準的資料。

使用最後這種方式,不僅使得json資料可以得到轉義,而且,json資料內容處理更加靈活多樣。

以上3中方法,視專案的大小而定,一般說來,功能比較多,資料庫牽扯到外來鍵的,或者資料內容多樣化的,最好可以採取後面兩種方式。

replaceAll時遇到的 轉義問題

sring content content content.replaceall 轉義後的結果是 多了乙個反斜槓。疑問 是否有一步到位能比較優雅的轉義。現在要去掉斜槓,就是如下處理 content content.replaceall replaceall 將斜槓單獨處理,但是這樣子容易將conte...

json 大括號 轉意 json轉義問題

後端程式接受前台傳遞過來json 1正常json沒有問題 比如 id 21,username 2張天師 phone 15175220421 remark 1adfadfsa department 1產品部 roleid 2 後台可以正常解析 var extraobj jsonconvert.dese...

json的單引號和雙引號問題(親測有效)

在json檔案寫陣列的時候,如果陣列的字串使用單引號包住的時候,會導致獲取到的json檔案不能通過json.parse 進行轉碼,然後在 json官網 發現了,字串是必須要用雙引號的。json就是一段有格式的字串,如果資料的封裝與解析都是我們自己做的時候,單引號和雙引號是沒啥關係的,但是如果用到一些...