我有以下对象:
var data = {
"parameter": []
};
我想像这样添加一个元素,保留键上的引号以及字符串值中的转义:
data.parameter.push({
"name": "TIBCO_Copy",
"value": "[{\"Source_Server\":[" + tibcoCopyJobs.map(function (i) { return i.sourceServer; }).join(',') +
"]},{\"Source_Path\":[" + tibcoCopyJobs.map(function (i) { return i.sourcePath; }).join(',') +
"]},{\"Destination_Server\":[" + tibcoCopyJobs.map(function (i) { return i.destinationServer; }).join(',') +
"]},{\"Destination_Path\":[" + tibcoCopyJobs.map(function (i) { return i.destinationPath; }).join(',') + "]}]"
});
预期结果:
{
"parameter": [
{
"name": "TIBCO_Copy",
"value": "[{\"Source_Server\":[1s, 2s, 3s]},{\"Source_Path\":[1sp, 2sp, 3sp]},{\"Destination_Server\":[1d, 2d, 3d]},{\"Destination_Path\":[1dp, 2dp, 3dp]}]"
}
]
}
在chrome检查器中看到的实际结果:
name: "TIBCO_Copy",
value: "[{"Source_Server":[1,5]},{"Source_Path":[2,6]},{"Destination_Server":[3,7]},{"Destination_Path":[4,8]}]"
请注意,它解释了嵌套键周围的转义引号以及顶级键上的常规引号。使用JSON.stringify()
保留转义符,但添加了另一组引号,使其成为:
name: "TIBCO_Copy",
value: ""[{\"Source_Server\":[1,5]},{\"Source_Path\":[2,6]…on_Server\":[3,7]},{\"Destination_Path\":[4,8]}]""
在所有这些中,我仍然会解释name
和value
键的问题,因为我似乎无法逃脱它们。
我需要以这种方式对其进行格式化,因为它会通过POST给Jenkins来触发远程构建,然后通过Build over SSH插件发送到Ansible,以便用Ansible的CLI执行。因此,当数据到达目的地时,必须进行转义才能使数据格式正确。
答案 0 :(得分:0)
我明白了。
除了使用JSON.stringify()
之外,我只是逃避反斜杠以及转义引用。结果是\
后跟"
,即\"
。所以现在它看起来像这样:
data.parameter.push({
"name": "TIBCO_Copy",
"value": "[{\\\"Source_Server\\\":[" + tibcoCopyJobs.map(function (i) { return i.sourceServer; }).join(',') +
"]},{\\\"Source_Path\\\":[" + tibcoCopyJobs.map(function (i) { return i.sourcePath; }).join(',') +
"]},{\\\"Destination_Server\\\":[" + tibcoCopyJobs.map(function (i) { return i.destinationServer; }).join(',') +
"]},{\\\"Destination_Path\\\":[" + tibcoCopyJobs.map(function (i) { return i.destinationPath; }).join(',') + "]}]"
});
编辑:上面是一个解决方案,用于在JS解释器解析时保留格式,并且在在通过HTTP请求发送之前需要再次使用时非常有用。但是,我的数据用例发生了变化,事实证明@JoshuaK在上面原始问题的评论中大多是正确的,如果不是现场的话。基本上,我把它留下了单独逃脱的报价,而不是带有逃脱报价的逃避反斜杠。当使用$http
通过AngularJS中的标准方法将其用于POST时,我能够将表单数据声明为JSON对象,如下所示:
data: 'json=' + JSON.stringify(data)
以上内容与我的关联数组(字典)对象中显示的内容完全相同,其中包含调用$http
的参数。您还可以查看this其他问题,了解有关如何使用AngularJS的$http
服务发布数据的详细信息。