在 Javascript 对象上使用 JSON.stringify 会插入反斜杠

Posted

技术标签:

【中文标题】在 Javascript 对象上使用 JSON.stringify 会插入反斜杠【英文标题】:Using JSON.stringify on Javascript object inserts backslashes 【发布时间】:2016-07-20 05:28:58 【问题描述】:

我想创建一个这样的对象,然后将其转换为可以存储在我的 mongodb 中的 JSON

var value1="1"
var value2="2"

var obj = field1:value1,field2:value2
JSON.stringify(obj)

不幸的是,这会产生:

\field1\:\1\,\field2\:\2\

仅供参考,我正在使用 Mongoose,并且正在尝试执行 push(obj)。 Console.log 显示,只要我对 obj 进行字符串化,就会添加反斜杠。

我的实际代码是这样的:

var newPaymentMethod = 
            token:token, type: result.cardType, number: result.last4, expiration: result.expirationDate;

看起来它成功地做了我想要的,但副作用是反斜杠。这是在我的数据库中看到的字段:

\"token\":\"cpkp86\",\"type\":\"MasterCard\",\"number\":\"4444\",\"expiration\":\"01/2018\""

这就是我想要的,减去反斜杠。

【问题讨论】:

你确定吗?我得到一个没有斜杠的字符串:jsfiddle.net/qpzLj5zd 我修改了 OP 以显示我的实际 obj 看起来它正在用\替换"。试试console.log('"') 看看会不会出现同样的结果 是的。是什么原因,我该如何解决?修改了 OP 以准确地向您展示它在我的数据库中的样子。 您使用什么工具/应用程序来执行 .js? 【参考方案1】:

这是与猫鼬相关的问题,请先尝试:click(阅读 cmets)。或者如果您不想阅读:

JSON.stringify(obj.toObject(minimize:false));

我想在您的代码中指出的是一件事:

代替:

var value1="1"
var value2="2"

这样做:

var value1 = 1,
    value2 = 2;

当您将数字放在引号之间时,它们会被视为字符串,这会给您带来很多麻烦。 value1 + value2 在第一种情况下会给你 12 ("foo" + "bar" = foobar),同时预期的输出是 3,你获得将变量定义为数字(第二种情况)。

【讨论】:

这不起作用。该示例适用于想要将文档转换为对象的人。另外,js对象没有toObject()方法。 是的,我的错,对不起。尽管如此,请记住将数字定义为字符串的后果。至于你的问题,这真的很奇怪。当您打开控制台并检查 console.log(JSON.stringify(obj)) 时,obj 会说什么?另外,没有字符串化的 console.log(obj) 的输出是什么? 当我对对象进行字符串化时,它会立即得到反斜杠。然后当我 JSON.parse 新字符串时,我得到这个: token: '99659w',\n type: 'MasterCard',\n number: '4444',\n expiration: '04/2018' " 这不是正确的输出。检查里面有什么并找到obj。看看它传递了什么值。你编辑的速度比光速还快。 我的意思是你浏览器的开发者工具/firebug中的控制台,无论你使用什么。

以上是关于在 Javascript 对象上使用 JSON.stringify 会插入反斜杠的主要内容,如果未能解决你的问题,请参考以下文章

如何在 xcode (swift) 中从 Json Schema / Json 生成模型对象?

在 Javascript 对象上使用 JSON.stringify 会插入反斜杠

javascript之对象篇(上)

使用javascript限制在特定div窗口上的html内拖动对象

在 JavaScript 中使用 fetch() 时,如何将返回对象的详细信息呈现到 html 页面上

无法在使用 *[Symbol.iterator]() 生成器 javascript 创建的可迭代对象上使用 next()