强制 JSON.stringify 转义正斜杠(即 `\/`)

2023-12-23

我正在写一个服务nodejs取代现有的系统编写.NET。该服务提供 JSON API,其中一个调用返回一个日期。 Microsoft 的 JSON 日期格式过去/现在在哪里1599890827000是毫秒偏移量:

/Date(1599890827000)/

我遇到的问题是JSON.stringify(用于res.send and res.json in express) 不会转义正斜杠,但现有的 Microsoft 库 (System.Web.Script.Serialization.JavaScriptSerializer https://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer(v=vs.110).aspx) 期望转义正斜杠。

例如,客户端期望这样的 JSON:

{
  "Expires": "\/Date(1599890827000)\/"
}

But JSON.stringify产生以下结果:

{
  "Expires": "/Date(1599890827000)/"
}

第二个结果完全有效,但 Microsoft 库不喜欢它并且无法解析。

有什么方法可以强制 Express/Node/JSON 转义正斜杠JSON.stringify或处理这个案子?

我可以在运行后使用正则表达式替换stringify但是由于我们在项目中使用了对象缓存系统,因此在发送到客户端之前必须转换为 JSON 而不是让。

注意:我无法更改客户端,只能更改 api 服务。


替换发生在逃逸之前 http://www.ecma-international.org/ecma-262/5.1/#sec-15.12.3,留给你:

"/Date(1599890827000)/"

Or:

"\\/Date(1599890827000)\\/"

实际上,您必须对结果输出运行字符串替换:

JSON.stringify(data).replace(/\//g, '\\/');

这意味着您将无法使用内置的 Expressres.json(data) https://github.com/expressjs/express/blob/b5a280111f94728e70aa1a22687e64aaf31abd81/lib/response.js#L222并且可能需要编写一个函数来替换它,例如:

function dotNetJSONResponse(res, data) {

    var app = res.app;
    var replacer = app.get('json replacer');
    var spaces = app.get('json spaces');
    var body = JSON.stringify(data, replacer, spaces);

    if (!this.get('Content-Type')) {
        res.set('Content-Type', 'application/json');
    }

    return res.send(body.replace(/\//g, '\\/'));
}

称其为:

app.get('/url', function (req, res) {
     dotNetJSONResponse(res, data);
});

However,也就是说,修复 .NET 中的行为将是更向前兼容的解决方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

强制 JSON.stringify 转义正斜杠(即 `\/`) 的相关文章

  • 使用 ReactJS 突出显示文本

    我试图突出显示与查询匹配的文本 但我不知道如何让标签显示为 HTML 而不是文本 var Component React createClass highlightQuery function name query var regex ne
  • 如何使用画布调整图像大小然后裁剪图像

    我已经知道如何 gt 调整图像大小 var image document getElementById myImage canvas document createElement canvas ctx canvas getContext 2
  • Javascript dispatchEvent click 在 IE9 和 IE10 中不起作用

    我正在尝试在 ExtJs 中构建应用程序时模拟鼠标事件 例如单击 鼠标悬停等 我使用下面的代码来模拟点击 function triggerEvent element eventName if document createEvent var
  • scrollTop 在 Chrome 中不起作用,建议的解决方法也不起作用

    许多其他问题 here https stackoverflow com questions 2544979 is there a problem with scrolltop in chrome here https stackoverfl
  • 停止 ASP.NET 按钮的页面重新加载

    NET 应用程序中 我插入了一个调用 Javascript 函数的按钮 OnClientClick事件 和 VB NET 函数 OnClick event
  • 如何防止 babel 转译生成器函数

    我对 babel 有一个奇怪的问题 当我在我的一个类中使用一个简单的生成器函数时 babel 会创建一个函数 其中包含对regeneratorRuntime var marked3 0 getQueryDummy map regenerat
  • 使用 facebook-node-sdk 模块上传照片 / (#324) 需要上传文件

    我正在尝试使用 facebook node sdk 模块将照片发送到页面 https github com Thuzi facebook node sdk https github com Thuzi facebook node sdk 我
  • 如何向 DOM 添加支持 Angular 的元素?

    我想以编程方式添加一些支持 Angular 的 DOM 元素 实际上 我可能需要添加自定义组件 我该怎么做 这是一个简单的小提琴来演示这个问题 http jsfiddle net ZJSz4 2 http jsfiddle net ZJSz
  • jQuery:当使用 on .scroll 事件和警报时,firefox 似乎无限循环

    我的主模板之一中有以下 jQuery 代码 document scroll function var scroll top document scrollTop alert scroll top if scroll top lt 70 fi
  • 使用jquery,下拉列表选择更改时如何重定向?

    我有一个下拉列表 如果有人选择一个选项 我想根据选择重定向到另一个页面 我怎样才能通过 jquery 做到这一点 将逻辑绑定到 change 事件 并从中获取当前值 val 以确定用户应该被重定向到哪里 此示例假设位置直接存储在值本身中 m
  • 如何将多种语言设置放入单个 .clang-format 文件中

    我想为 java javascript 和 c 创建一个 clang 格式 我知道如何转储单一语言的示例配置 但不知道如何合并这 3 个配置文件 有关如何将多种语言配置放入单个文件中的示例 BasedOnStyle LLVM IndentW
  • 从 Web 浏览器控件读取 Javascript 变量

    我正在尝试读取从表单上的 WebBrowser 控件加载和调用的 Javascript 变量的值 Example index html 引用名为 test js 的 javascript 在 test js 上 创建并填充了几个变量 然后i
  • 如何在 html5 中加载部分 html? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 询问我们的问题推荐或查找工具 库或最喜欢的场外资源与 Stack Overflow 无关 因为它们往往会吸引固执己见的答案和垃圾邮件 反而
  • 如何将 props 传递给模态

    我有一个购物应用程序 我可以在其中映射一些产品并将它们呈现在屏幕上 用户可以增加 减少数量 当数量达到 1 并且用户点击减少时 一些中间件会介入并询问他们是否确定要将其从购物篮中删除 如果他们单击 否 则会关闭模式并将其留在购物篮中 如果他
  • 从 Angular Controller 调用节点函数的常用方法

    让我在这之前加上我是 Node Express 新手 我有一个 AngularJS 应用程序 它利用 Node JS 来管理 Azure Blob 需求 例如创建 Blob 容器 如下所示 function test containerNa
  • 函数声明可以出现在 JavaScript 的语句内部吗?

    请考虑将官方 ECMAScript 规范作为您答案的来源 而不是特定浏览器供应商发布的文档 我知道 Mozilla 用 函数语句 扩展了它的 JavaScript 实现 因此 根据 ECMAScript 规范 因此 其中定义的语法产生式 这
  • 使用 Perl 循环 JSON [重复]

    这个问题在这里已经有答案了 我是 Perl 的新手 想要循环这个 JSON 数据并将其打印到屏幕上 我怎样才能做到这一点 arr Year 2012 Quarter Q3 DataType Other 3 Environment STEVE
  • 静态资源和非静态资源有什么区别?

    我主要是一名前端开发人员 设计师 但最近我一直在探索端到端解决方案 昨天 我使用平均堆栈完成了一个 TODO 应用程序 并想开始探索我的 VPS 的部署选项 话虽这么说 有人建议我使用 nginx 作为反向代理来提供静态资源 不幸的是 我陷
  • 对数滑块

    我有一个值范围从 0 到 100 的滑块 我想将它们映射到 100 到 10 000 000 的范围 我在网上看到过一些函数 但它们都是用 C 编写的 我需要它在 JavaScript 中 有任何想法吗 您可以使用这样的函数 functio
  • jquery ui 自动完成添加跨度

    我在 div 上使用 jQuery 自动完成 但我得到了 jquery 自动添加的额外范围 span class ui helper hidden accessible search test span 如何防止创建此跨度 我通过添加 CS

随机推荐

  • JavaScript 倒计时,添加小时和分钟

    所以 我有以下 秒倒计时 井然有序 但 我也尝试在倒计时中添加小时和分钟 理想情况下保持相同的结构 并且只使用纯 JS 我希望输出是 本次促销活动还剩 X 小时 X 分钟 X 秒 var count 30 var counter setIn
  • 作业提交后出现 ClassNotFoundException

    我正在尝试Spring数据 Hadoop http www springsource org spring data hadoop用于从本地计算机的 IDE 在远程集群上执行 MR 代码 Hadoop 1 1 2 Spring 3 2 4
  • 在mssql 2005中保存日期时间,不带小时,分钟和秒

    我想将 sql 2005 中的日期保存为日期 没有小时 分钟和秒 我想这样做是因为如果填写了小时 分钟和秒 则 Between 函数并不总是正确的 但 datetime 和 Smalldatetime 都不允许这样做 在 2008 年 您可
  • 在 PostgreSQL 中如何连接两个表选择单独的信息

    连接时遇到问题 我有一张桌子叫subjects subno subname 30006 Math 31445 Science 31567 Business 我还有一张名为enrollment subno sno 30009 980008 4
  • 创建固定大小的 std::vector 并写入元素

    在 C 中 我希望分配一个固定大小 但大小在运行时确定 的 std vector 然后写入该向量中的元素 这是我正在使用的代码 int b 30 const std vector
  • 使用空列创建唯一约束

    我有一张具有以下布局的桌子 CREATE TABLE Favorites FavoriteId uuid NOT NULL PRIMARY KEY UserId uuid NOT NULL RecipeId uuid NOT NULL Me
  • 所有接口上的 UDP 广播

    在具有有线和无线接口 例如 192 168 1 x 和 192 168 2 x 子网 的 Linux 系统上 我想发送通过所有可用接口 即通过有线和无线接口 发出的 UDP 广播 目前我 sendto 到 INADDR BROADCAST
  • 尝试添加资源类时出现冲突的 URI 模板错误

    我有一个使用 Jersey 和 Tomcat7 的宁静实现 我在 Campher rest 包中定义了 3 个名为 RegionService ClientService 和 NoteService 的资源 当我尝试添加另一个名为 Test
  • Android:无法调用没有参数的私有 android.net.Uri()

    我正在使用 Gson 将自定义模型的数组列表保存到共享首选项中 存储代码 ArrayList
  • 如何在 Tensorflow 中累积和应用异步 n 步 DQNetwork 更新的梯度?

    我正在尝试实施深度强化学习的异步方法 https arxiv org pdf 1602 01783 pdf其中一个步骤需要在不同步骤上累积梯度 然后应用它 在张量流中实现这一目标的最佳方法是什么 我到目前为止已经积累了梯度 但我认为这不是实
  • 将 HttpRequestMessage 转换为 HttpRequest

    我正在将 ASP NET Web 应用程序转换为 MVC Web Api 项目 我的方法之一期望HttpRequest班级 然而 Web Api 控制器只保存HttpRequestMessage this Request 目的 你知道我如何
  • 在 Razor MVC 中使用 HTML 内容解码字符串

    我有一个来自数据库的字符串 你好 现在我希望我的剃刀视图显示为 Hello 如何在 Razor 中进行解码 Use HtmlHelper Raw https msdn microsoft com en us library gg568896
  • 如何在解析中使用多个条目格式化输出

    我最近问了一个问题 tadman 的回答非常好如何修改代码以从外部获取查询并将结果保存到外部 https stackoverflow com questions 38940863 how to amend a code to get que
  • 如何将环境变量传递给 Docker 容器?

    如何从容器访问外部数据库 在连接字符串中进行硬编码的最佳方法是 Dockerfile ENV DATABASE URL amazon rds connection string 您可以使用以下命令将环境变量传递给容器 e flag dock
  • 使用 AutoMapper 将元数据传输到视图模型的技术

    我使用 AutoMapper 将域对象映射到视图模型 我的域层中有元数据 我想将其转移到视图层和 ModelMetadata 中 此元数据不是 UI 逻辑 但为我的视图提供了必要的信息 现在 我的解决方案是使用单独的 MetadataPro
  • 如何检查 imageview 是否为空

    我有一个具有表单的应用程序 并且有一些字段需要用户填写 我想禁用 下一步 按钮 直到用户填写这些字段 字段是 iamgeView EditText Spinner 我知道如何检查文本编辑 但如何检查用户是否填充图像和微调器 图像视图将允许用
  • React hooks useEffect 更新 window.innerHeight

    我想在调整屏幕大小时使用内部窗口高度更新状态 当我记录状态高度时useEffect但是 当我登录时 我每次都会得到 0updateWindowDimensions函数高度值按预期更新 如何每次都用新值更新状态 const height se
  • 嵌套元素的 XML 映射属性

    我正在使用 XStream 并且有一个 XML 示例
  • 用 lxml.html 替换元素

    我对 lxml 和 HTML 解析器整体来说还很陌生 我想知道是否有一种方法可以用另一个元素替换树中的元素 例如我有 body code def function arg print arg code Blah blah blah code
  • 强制 JSON.stringify 转义正斜杠(即 `\/`)

    我正在写一个服务nodejs取代现有的系统编写 NET 该服务提供 JSON API 其中一个调用返回一个日期 Microsoft 的 JSON 日期格式过去 现在在哪里1599890827000是毫秒偏移量 Date 1599890827