代码之家  ›  专栏  ›  技术社区  ›  Darrel Holt

创建JavaScript字典,同时保留引号和转义符

  •  0
  • Darrel Holt  · 技术社区  · 7 年前

    我得到了以下物体:

    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]}]"
        }
      ]
    }
    

    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

    我需要以这种方式格式化它,因为它被发送到Jenkins以触发远程构建,然后通过SSH插件发送到Ansible,并使用Ansible的CLI执行。因此,当数据到达目的地时,为了使其格式正确,必须进行转义。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Darrel Holt    7 年前

    我想出来了。

    而不是使用 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基本上是正确的。基本上,我将其保留为单转义引号,而不是带转义引号的转义反斜杠。当使用它通过AngularJS中的标准方法进行POST时 $http 我能够将表单数据声明为JSON对象,如下所示:

    data: 'json=' + JSON.stringify(data)

    以上内容与我的关联数组(字典)对象中显示的内容完全相同,该对象包含用于调用的参数 $http . 你也可以看到 this 关于我如何使用 $http AngularJS的服务。