JSON中雙引號(hào)的輪回使用過(guò)程中一定要小心
更新時(shí)間:2014年03月05日 17:03:08 作者:
如果JSON對(duì)象中有屬性是包含雙引號(hào)當(dāng)轉(zhuǎn)換成字符串形式,將自動(dòng)加上反斜線,詳細(xì)請(qǐng)祥看本文
1. 如果JSON對(duì)象中有屬性是包含雙引號(hào)的,比如
{
"description": "25""
}
如果轉(zhuǎn)換成字符串形式,將自動(dòng)加上反斜線,變?yōu)?25\"", 然后傳遞給REST API,保存到MongoDB中。
此時(shí)如果使用MongoDB的shell顯示該數(shù)據(jù),為"25\"", 正確。
2. 但是如果用C++ driver讀取這個(gè)值是,則得到"25"", 因此如果將它直接返回到瀏覽器端,用jQuery.parseJSON()來(lái)解析就會(huì)報(bào)錯(cuò)。
C++段序列化成字符串的時(shí)候需要判斷一下,將"替換成\".
void string_to_json_string(std::string const& str, std::string & json_str) {
std::stringstream ss;
for (size_t i = 0; i < str.length(); ++i) {
if (str[i] == '"') {
ss << '\\' << '\"';
} else {
ss << str[i];
}
}
json_str = ss.str();
}
3. 如果JavaScript對(duì)"25\""調(diào)用jQuery.parseJSON()之后,反斜線已經(jīng)消失,又變?yōu)?25"". 如果再次對(duì)該屬性值調(diào)用jQuery.pareseJSON則又會(huì)出錯(cuò)。
JavaScript必須寫(xiě)代碼防止錯(cuò)誤:
removeDoubleQuotes: function(str) {
return str.replace("\"", "\\\"");
},
這就是雙引號(hào)在JSON中的輪回。夠麻煩吧,要小心點(diǎn)。
復(fù)制代碼 代碼如下:
{
"description": "25""
}
如果轉(zhuǎn)換成字符串形式,將自動(dòng)加上反斜線,變?yōu)?25\"", 然后傳遞給REST API,保存到MongoDB中。
此時(shí)如果使用MongoDB的shell顯示該數(shù)據(jù),為"25\"", 正確。
2. 但是如果用C++ driver讀取這個(gè)值是,則得到"25"", 因此如果將它直接返回到瀏覽器端,用jQuery.parseJSON()來(lái)解析就會(huì)報(bào)錯(cuò)。
C++段序列化成字符串的時(shí)候需要判斷一下,將"替換成\".
復(fù)制代碼 代碼如下:
void string_to_json_string(std::string const& str, std::string & json_str) {
std::stringstream ss;
for (size_t i = 0; i < str.length(); ++i) {
if (str[i] == '"') {
ss << '\\' << '\"';
} else {
ss << str[i];
}
}
json_str = ss.str();
}
3. 如果JavaScript對(duì)"25\""調(diào)用jQuery.parseJSON()之后,反斜線已經(jīng)消失,又變?yōu)?25"". 如果再次對(duì)該屬性值調(diào)用jQuery.pareseJSON則又會(huì)出錯(cuò)。
JavaScript必須寫(xiě)代碼防止錯(cuò)誤:
復(fù)制代碼 代碼如下:
removeDoubleQuotes: function(str) {
return str.replace("\"", "\\\"");
},
這就是雙引號(hào)在JSON中的輪回。夠麻煩吧,要小心點(diǎn)。
您可能感興趣的文章:
- js使用eval解析json實(shí)例與注意事項(xiàng)分享
- java對(duì)象序列化與反序列化的默認(rèn)格式和json格式使用示例
- jquery序列化form表單使用ajax提交后處理返回的json數(shù)據(jù)
- 教你如何使用PHP輸出中文JSON字符串
- JSON.parse()和JSON.stringify()使用介紹
- 直接在JS里創(chuàng)建JSON數(shù)據(jù)然后遍歷使用
- PHP中使用json數(shù)據(jù)格式定義字面量對(duì)象的方法
- 使用JSON.parse將json字符串轉(zhuǎn)換成json對(duì)象的時(shí)候會(huì)出錯(cuò)
- Android中生成、使用Json數(shù)據(jù)實(shí)例
- PHP使用json_encode函數(shù)時(shí)不轉(zhuǎn)義中文的解決方法
- ASP.NET中MVC使用AJAX調(diào)用JsonResult方法并返回自定義錯(cuò)誤信息
- 在JavaScript中使用JSON數(shù)據(jù)
相關(guān)文章
javascript 類方法定義還是有點(diǎn)區(qū)別
這兩個(gè)定義都可以,不過(guò)后者對(duì)FF貌似好一些,前者在FF下可能出現(xiàn)missing before formal parameters錯(cuò)誤,導(dǎo)致js無(wú)法執(zhí)行。2009-04-04
Javascript動(dòng)態(tài)創(chuàng)建div的方法
這篇文章主要介紹了Javascript動(dòng)態(tài)創(chuàng)建div的方法,是javascript節(jié)點(diǎn)操作的典型應(yīng)用,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-02-02
選擇器的朋友可以試試這個(gè)思路 延遲執(zhí)行歸并選擇操作
因?yàn)橥ǔ_x擇器需要遍歷整個(gè)元素樹(shù),所以當(dāng)多次選擇會(huì)比較耗時(shí),忽然想到是否能利用setTimeout將多次選擇操作歸并到一起2011-01-01
JavaScript實(shí)現(xiàn)購(gòu)物車(chē)案例
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)購(gòu)物車(chē)案例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
JS獲取input file絕對(duì)路徑的方法(推薦)
下面小編就為大家?guī)?lái)一篇JS獲取input file絕對(duì)路徑的方法(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-08-08
使用Promise鏈?zhǔn)秸{(diào)用解決多個(gè)異步回調(diào)的問(wèn)題
這篇文章主要給大家介紹了使用Promise鏈?zhǔn)秸{(diào)用解決多個(gè)異步回調(diào)問(wèn)題的方法,文中給出了詳細(xì)的介紹和示例代碼,有需要的朋友可以參考借鑒,下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-01-01

