1
我正在使用具有json類的舊的經典asp/vbscript應用程序。JSON編碼字符串文字「asdf \ nsedfgs」
我有一個字符串文字:asdf\\nsedfgs
那不是逃避json或任何東西。它字面上的那些字符。
因此,要在JSON字符串中使用該值,它應該是這樣的,對吧?
{"somedesc":"asdf\\\\nsedfgs"}
...與兩個反斜槓字符轉義。
然而,出路JSON,回到字符串文字,我們會做這樣的事情(按照這個順序)
val = Replace(val, "\""", """")
val = Replace(val, "\\", "\")
val = Replace(val, "\/", "/")
val = Replace(val, "\b", Chr(8))
val = Replace(val, "\f", Chr(12))
val = Replace(val, "\n", Chr(10))
val = Replace(val, "\r", Chr(13))
val = Replace(val, "\t", Chr(9))
...但上面的字符串,這個序列替換()爲我們提供了不正確的解碼值:
結果(注意換行,爲4 \
得到了更換兩個,那麼\n
得到了更換,換行)
asdf\
sedfgs
所以問題:
- 如何正確地編碼和解碼文字
asdf\\nsedfgs
來自和json? - 是解碼邏輯正確嗎?按正確的順序?它似乎不是,因爲它如何區分字面
\n
與逃脫chr(13)
? - 還有什麼我在這裏失蹤?
這是我的問題的一個很好的解決方案。對我來說,令人驚訝的是,有多少JSON解析器無法處理這種情況(以及其他許多邊界情況)。閱讀[解析JSON是一個Minefield](http://seriot.ch/parsing_json.php)來感受我在說什麼。他針對常見測試案例測試了50或60個解析器,沒有兩個具有相同的合格/不合格結果。 – GWR
它只是歸結爲使用具有良好支持的框架,個人而言,我推薦這個[JSON對象類3.5.4由RCDMK](https://github.com/rcdmk/aspJSON),因爲它有很好的支持開發人員正在積極研究它。 – Lankymart
@GWR剛剛測試過庫,它處理得很好 - 「asdf \\ nsedfgs」變成了'asdf \\\\ nsedfgs'等。這是使用庫的v3.5.4,它是在2月份最後更新的。以下是使用該庫的代碼的最新示例 - [Output ADODB.RecordSet as JSON](// stackoverflow.com/a/42417686)。 – Lankymart