2016-04-25 44 views
1

我使用的是readJSON,如果有錯誤,則產生Left err。有時候這個錯誤(一個字符串)包含引號,例如。 G。 ReferenceError: "JSON" is not defined.我需要返回該錯誤包裹在一個JSON字符串,有點像如何連接字符串和變量以便變量中的引號被轉義?

Left err -> "{ \"error\" : \"The error is: " ++ (show err) ++ "\" }" 

(需要的show,因爲我們是在一個失敗的單子。)

但當err有類似的例子引號上面,這撕開了JSON。如何得到這個工作?

(在PSCI,show似乎做逃避的事情做好,比如show "\"foo\""產生的\煙花,但在函數內部以上,不?)

+0

您不應該使用字符串連接構建您的JSON。使用'JSON.stringify',它將處理編碼。 *編輯:*我假設庇護標記也有這個,或類似的東西。 –

+0

謝謝。您在PureScript中不會碰巧知道如何做到這一點,是嗎? (我不是JS專家)我可以構建一個JSON *對象*,但調用函數(Java/Rhino)期望返回一個字符串。 – 0dB

回答

3

你可能會更好使用purescript-argonaut而不是purescript-foreign爲您的用例在這裏。如果show是argonaut的JSON值,它將使用JSON.stringify來產生該值。

+0

謝謝,我不知道有其他選擇。到目前爲止,我的代碼依賴於'purescript-foreign'。我可能會考慮改變它的含義或使用混合,意思是使用'purescript-argonaut'來表示這種情況。 – 0dB

+0

另請參閱我對@Christoph Hegemann回答的評論:我認爲這是一個不一定與JSON相關的通用問題。我認爲它與PureScript中的'show'或者連接字符串時處理引號的其他方式有關。 – 0dB

0

「輕量級」的方式是撥打Global.Unsafe.unsafeStringify,這只是對JSON.stringify的FFI調用。如果這種情況經常發生,你最好像@gb所說的那樣使用Argonaut。

+0

我想知道:我的問題不是一個普遍的問題,其中一個連接兩個字符串,其中一個字符串需要被引用來逃脫? (我不確定這是否是JSON問題。) – 0dB

+0

字符串本身是一個完全有效的JSON片段。我認爲你的問題更多的是關於序列化字符串,這在js世界中使用JSON.stringify完成。 –