簡體   English   中英

JSON是否接受多行數組?

[英]Does JSON accept multi-line arrays?

我在學習JavaScript的同時,嘗試僅使用JSON將SPA(單頁應用程序)構建為一個簡單的網站。

在我使用的技術中,帶有HTML標簽的頁面內容是由JavaScript注入的。

由於最新的JavaScript版本可以在反引號之間存儲數據

`
Multi
Line 
Data
`

我問多行JSON對象是否可以通過相同的技術或類似方法存儲數據,因此我可以實現一種編輯數據的方法,而不必像新的JavaScript框架那樣從HTML文件導入每個標簽。

`` "" '' 

例如:

var spa = {
..."spa_html_id_body_tag":"< h2 > body content < h2/ > < br > Bal bla bla .............."
}

JSON不像JavaScript模板文字那樣支持反引號。 但這不應該是一個問題。 您仍然可以使用模板文字來創建多行字符串,並且當您調用JSON.stringify() ,它將在JSON中使用\\n作為換行符。

JSON是一個非常嚴格的模式。 很好,但是它有一些缺點,其中最大的缺點是無法存儲多行字符串。 對於將諸如結構化文本和公共密鑰之類的內容存儲在JSON中,以便以后在瀏覽器中或在Node中的服務器上與JavaScript代碼進行交互時,這尤其令人討厭。

幸運的是,這里有一個快速而簡單的解決方案!

示例假設我們有一個服務器及其關聯的公共密鑰的列表。 要將數據存儲為JSON,我們可以將其存儲為以逗號分隔的字符串對象數組,該數組可能看起來像這樣:

{
    "servers": {
        "servername.com": {
            "publicKey": [
                "-----BEGIN PUBLIC KEY-----",
                "MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0VmDBbzXdgubV/X8JP9B",
                "rM/CqvXBey49BoYjk0ar4OA4LZnmD0A/pn6voPPe+DQC3ZpSFfkdZc5s/ij7edve",
                "ob+reWdGOQAQnDxaGQoFyru/2tz1lNfaVOBU71QcpG4kda4XDjbS62hOqebgkQ0X",
                "71ireglZeaJABvu6EFPFBwyr2ROmM1dq4rKtinpgUf9CTMPL/8yyitka+HsVZTuI",
                "HDpFFxv6xPntfjMrIIRUPieIjRSJcF9yrTVqDIIOO9J3KplphXLXhAHRAnX3ducD",
                "sZYe5yZZEdkS9Kx4P0INkyiqs9DFGwVnIMU07IuM1E+LqLVTqm46MVxzrjaAcyVC",
                "WDTtzkERgvvaG8elbjb6iiA9aijNHM/EK0f68mjme7s0CHn9GJg4TwwvSLb8LqCs",
                "cCKT11WAanE+SuAi0WinuaeFORwAFFXh7O5sS8At4woCNVsIZpFSWWiRBoZf5UBC",
                "SfK8v9AL58foDDiCGlWKcpoQN5KBDBCTBD+RiXgoCKS9daHGpmXfAFsWmcjpVzvs",
                "l24ei4Ue1jd7kj7Dlc8qtXQGZS1BhwDaIV4SQBGYKEBgTMExcsAtI9Sd1rtMFybO",
                "wdfGmZkQ7pcLqOgEzyUOma+vwhWlvtfQXavH5NEdAS+ahsf8SDAI0TQtihLxTvO5",
                "LLrORy0wclzv7V0s+6qoRuMCAwEAAQ==",
                "-----END PUBLIC KEY-----"
            ]
        }
    }
}

您可以使用JSONLint驗證此有效JSON

然后,要檢索我們的文本塊,我們只需要將它們重新連接到換行符上即可,我們可以這樣做:

var publicKey = our_data.servers['servername.com'].publicKey.join('\n');

就是這樣! 現在,您可以在JSON中存儲多行字符串。 這不是最漂亮的東西,但是鑒於JSON的限制,這是最簡單的事情。

根據定義,JSON數據使用雙引號引起來的字符串。 根據您的用例,使用HTML標記仍可能是最簡單的解決方案:

{
    "text": "Multi<br />Line<br />Data"
}

如果您希望使用\\n表示法來表示新行,則可以將文本編寫為"Multi\\nLine\\nData"並且在必要時在將其導入JavaScript時使用replace方法:

JSON.parse(json).text.replace(/\n/g, '<br />');

但是,如果您想要更大的靈活性,那么您可能需要進入HTML模板世界。 對於比HTML更簡單的選項,我建議您看一下Markdown 在Markdown中,您的示例可以簡單地編寫為:

Multi
Line
Data

您可以在JSON中引用Markdown文件,並使用該引用將其導入JavaScript。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM