【问题标题】:Parsing JSON in node express - ends up with \n between delimiters?在节点快递中解析 JSON - 以分隔符之间的 \n 结尾?
【发布时间】:2020-06-27 15:27:13
【问题描述】:

我正在向 express 端点发送 Ajax 请求,如下所示:

var postData = {
      method: "POST",
      url: "/order/address",
      data: { order: JSON.stringify(addressFields) },
      cache: false
    };

    updateAjax = $.ajax(postData).done(function(data) {

发送的地址对象是一个 JSON 数组。在发布数据对象中执行此操作之前,我已经确认它尚未被字符串化。

它发布到运行 node express 的服务器,路径为 /order/address。

快速路线如下,仅显示到 json 被解析的点,因为它是唯一相关的部分:

router.route('/')
  .post(function (req, res, next) {
    // prevents caching of customer information
    res.header('Cache-Control', 'private, no-cache, no-store, must-revalidate');

    const addresses = JSON.parse(req.body.order);

在被解析之前,req.body.order 是:

[{\"isDefaultShipping\":true,\"firstName\":\"\",\"lastName\":\"\",\"street1\":\"\",\"street2\":\"\",\"city\":\"\",\"postcode\":\"\",\"region\":\"\",\"country\":\"GB\",\"phone\":\"\",\"isDefaultBilling\":true}]

而且,这是我遇到的问题,在解析后它最终成为无效的 JSON 对象:

[\n {\n isDefaultShipping: true,\n firstName: '',\n lastName: '',\n street1: '',\n street2: '',\n city: '',\n postcode: '',\n region: '',\n country: 'GB',\n phone: '',\n isDefaultBilling: true\n }\n]

我无法删除换行符 - 我猜在正在解析的字符串化数据中存在不可见的换行符 - 但我无法终生删除它们?

编辑:有人好心(礼貌地)指出我的愚蠢,上面的输出,带有 \n 换行符,是我的记录器,所以忽略那部分。 把它留在那儿 - 好吧,因为删除我得到答案的这部分问题是不礼貌的。

Postman 在路由中遇到 JSON.parse 行时显示以下问题:

SyntaxError: Unexpected token u in JSON at position 0\n at JSON.parse (<anonymous>)

【问题讨论】:

  • 但是你为什么首先要对数据进行字符串化呢?然后在另一端重新解析它?不是浪费资源吗?它也会造成你的问题
  • 你看到那个输出了吗,是的,它是无效的 JSON,但它是一个有效的 Javascript 数组。
  • "一个无效的 JSON 对象" — 那它还是一个字符串吗?或者它是一个数组?是否真的存在换行符,或者它们只是您的调试工具向您显示对象的方式?
  • 我可以使用JSON.parse("[{\"isDefaultShipping\":true,\"firstName\":\"\",\"lastName\":\"\",\"street1\":\"\",\"street2\":\"\",\"city\":\"\",\"postcode\":\"\",\"region\":\"\",\"country\":\"GB\",\"phone\":\"\",\"isDefaultBilling\":true}]");成功解析它
  • 实际上,我认为这是我的调试工具,将输出显示为有换行符。

标签: javascript node.js json parsing stringify


【解决方案1】:

只需替换\n

router.route('/')
  .post(function (req, res, next) {
    // prevents caching of customer information
    res.header('Cache-Control', 'private, no-cache, no-store, must-revalidate');

    const addresses = JSON.parse(req.body.order).replace(\[\n]+\, '');

【讨论】:

  • 解析后不是字符串,是对象。
猜你喜欢
  • 2013-07-03
  • 1970-01-01
  • 2018-10-20
  • 2022-12-19
  • 1970-01-01
  • 2019-04-19
  • 2016-12-17
  • 1970-01-01
  • 2015-10-19
相关资源
最近更新 更多