javascript - 如何将序列化的 JSON 字符串包装在 'single quotes' 中

标签 javascript json rest

我有一个名为 blocki 的 javascript 对象,我想使用 rest API 对其进行序列化和更新。所以我打电话:

JSON.stringify(blocki)

这给了我这个字符串:

"{"name":"Updated Blocki","bounds":{"x":"2em","y":"2em","w":"8em","h":"12em"}}"

这几乎是我所需要的,除了双引号字符串应该在外面有单引号,像这样:

'{"name":"Updated Blocki","bounds":{"x":"2em","y":"2em","w":"8em","h":"12em"}}'

根据 MDN JSON.stringify 上的例子它应该返回一个用单引号引起来的字符串。但是,当我在该页面中尝试相同的示例时,我得到了用双引号引起来的字符串。例如,当我在 Firefox 和 chrome 控制台中键入 JSON.stringify({}) 时,我返回 "{}" 而不是 '{}'

如何正确序列化我的 Javascript 对象,以便外引号为:'。同样,这个字符串是我想要实现的示例:

'{"name":"Updated Blocki","bounds":{"x":"2em","y":"2em","w":"8em","h":"12em"}}'

理想情况下,我想学习一种很好的方法来序列化对象,而不必在序列化后修改字符串。

编辑: 我认为我需要这样做的原因是,当字符串用双引号引起来时,我正在使用的 API 在某种程度上不满意。例如当我做的时候

curl -i -H "Accept: application/json" -H "Content-type: application/json" -X PUT -d "{"name":"Updated Blocki","bounds":{"x":"2em","y":"2em","w":"8em","h":"12em"}}" 'http://localhost:3000/api/blockies/17'

请求失败,服务器给出解析错误。但是当我尝试时:

curl -i -H "Accept: application/json" -H "Content-type: application/json" -X PUT -d '{"name":"Updated Blocki","bounds":{"x":"2em","y":"2em","w":"8em","h":"12em"}}' 'http://localhost:3000/api/blockies/17'

put 请求成功通过,对象被更新。

最佳答案

您不需要用单引号将字符串括起来 - 它们仅在 MDN 页面上用于显示与输出相对应的字符串文字

引号不是字符串本身内容的一部分!

编辑 - 自从我写完以上内容后,您已经编辑了问题。

简单的答案是,如果您绝对必须将字符串用单引号括起来您自己,只需使用:

var json = "'" + JSON.stringify(obj) + "'"

较长的答案仍然是您根本不应该包装字符串。将整个命令行传递给 shell 被认为是不好的做法 - 某些环境变量(尤其是 IFS)的存在会改变命令行的解释方式,从而导致安全问题。

由于您使用的是 Javascript,我猜您可能正在使用 nodejschild_process 模块?如果是这样,您应该使用 .spawn 而不是 .exec,并将参数作为数组传递。当以这种方式传递时,参数直接传递到 Curl 的 argv 数组中,而无需先由 shell 解析,因此根本不需要引用,例如:

var child = spawn('curl', [
    '-i', '-H', 'Accept: application/json',
    '-H', 'Content-type: application/json', 
    '-X', 'PUT',
    '-d', json,
    'http://localhost:3000/api/blockies/17'
]);

或者更好的是不使用 Curl 直接从 Node 进行 PUT 调用。

关于javascript - 如何将序列化的 JSON 字符串包装在 'single quotes' 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13240930/

相关文章:

javascript - 如何使用 JS 或 jQuery 确定文本区域中的光标是在第一行还是最后一行?

Javascript:将值列表转换为对象集

python - 是否可以在服务器端的 Flask 中动态更新呈现的模板?

java - PHP DateTime到Java Date

java - Jersey2.0及以上版本如何创建RESTful web服务客户端

javascript - 变量无故改变

javascript - Document() 是做什么的?

python - Swagger 不使用 Django BaseSerializer 对象

javascript - 需要链接到 javascript 程序的特定部分?

java - 使用 ClientResponse 发布时 Jersey 客户端 MessageBodyProviderNotFoundException