【问题标题】:What is the right way to store JavaScript source code in a json object?将 JavaScript 源代码存储在 json 对象中的正确方法是什么?
【发布时间】:2015-06-10 20:20:26
【问题描述】:

我想在 textarea 中编辑 JavaScript 并将其存储回 JavaScript 对象。例如我有这个对象:

var item1 =   {
    'id' : 1,
    'title':'title',
    'sourcecode' : "alert('hallo')"
  };

如果我将内容更改为 alert("hallo") 或更复杂的示例,这会破坏我的对象吗?

我认为有一些像 https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/escape 这样的转义函数。但它被标记为已弃用。

如果不推荐使用,那么将复杂的 JavaScript 代码存储到 JavaScript 对象中的正确方法是什么?

我应该使用字符串化吗?

https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify

JSON.stringify() 方法将 JavaScript 值转换为 JSON 字符串,如果替换函数是可选的替换值 指定的,或者可选地仅包括指定的属性,如果 指定了替换数组。

这不像是内置了自动逃逸。

【问题讨论】:

  • "alert('hallo')" 只是一个字符串。你会像任何其他字符串一样转义它,你将它传递给JSON.stringify,例如"alert(\"hallo\")"。值得注意的是,它实际上不需要按原样转义,因为它使用单引号
  • 是的,这是一个非常简单的例子,因为我想存储更复杂的代码,混合了双引号和单引号。所以你的意思是 stringify 是正确的方法?
  • 没关系。关键是,source 进行了转义。无论您在哪里创建 item1 并设置sourcecode 属性。是的,JSON.stringify 将创建该对象的 JSON 字符串表示
  • 您存储的任何 javascript 都将是 RGraham 所说的“只是”一个字符串,如果您想逐行检查它或者只是提高调试时的易读性,您可以将每一行保存在数组中。在内存和访问效率方面,虽然你可能不会比字符串做得更好。

标签: javascript json


【解决方案1】:

如果您需要将数据发送到服务器,我会说您应该 encodeURI 您的源代码,然后 JSON.stringify 整个对象。从服务器获取数据时,你应该decodeURIsourceCode

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-16
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 2021-05-01
    • 1970-01-01
    相关资源
    最近更新 更多