繁体   English   中英

将字符串转换为 JSON 对象数组 - NOdejs

[英]convert a string to JSON object array- NOdejs

假设我正在向 /api/products 发送 POST 请求。 我的身体如下图

{
      "products":[
                {
                    "id":"5f5065e44a12bd00232bcc6g",
                    "status":"true"
                },
                {
                    "id":"5f5065e44a12bd00232bcc6g",
                    "status":"true"
                }
     ]
}

在我的路线中,我试图将上述产品转换为 JSON 对象;

下面是我的服务器代码

const { products } = req.body;
console.log(JSON.parse(products));

但这给了我错误“消息”:“位置1的JSON中出现意外标记o”

我怎样才能做到这一点?

干杯

添加了截图

在此处输入图片说明

在此处输入图片说明

下面也试过。 但没有运气

什么都行不通。

const products = req.body;
console.dir(typeof products); // 'object'
console.dir(products); // { products: '[object Object]' } 

const { products } = req.body;
console.dir(typeof products); // 'string'
console.dir(products); // '[object Object]'

邮递员开发者控制台如下。 似乎不是问题

{
    "products":[
            {
                "id":"5f5065e44a12bd00232bcc6g",
                "status":"true"
            },
            {
                "id":"5f5065e44a12bd00232bcc6g",
                "status":"true"
            }
    ]
}

查看变量products和调试器的内容。

在这一行中,您使用的是对象解构赋值,但右侧不是对象,而是字符串:

const { products } = req.body;

试试这个:

const { products } = JSON.parse(req.body);

编辑您似乎正在使用 Express 中间件或类似的。 您的对象很有可能已经从 JSON 转换而来,因此您只需要原始行而不是JSON.parse行。

const { products } = req.body;
console.dir(products);

最好的办法是通过在它周围放置{}来修复您发送到/api/products的内容,如下所示:

{
    "products":[
            {
                "id":"5f5065e44a12bd00232bcc6g",
                "status":"true"
            },
            {
                "id":"5f5065e44a12bd00232bcc6g",
                "status":"true"
            }
    ]
}

现在它是有效的 JSON,您可以通过JSON.parse转换它:

const obj = JSON.parse(req.body);
console.log(obj);
const { products } = obj;

要不就

const { products } = JSON.parse(req.body);

注意我在那里使用整个身体。 这将为您提供一个带有products数组的属性( products )的对象。 或者,您可以使用自动解析它的中间件,而不是手动解析它,以便req.body是解析结果,在这种情况下,它只是:

console.log(req.body);
const { products } = req.body;

如果由于某种原因您无法发送正确的 JSON,但它始终采用您显示的形式,您可以在之后添加{} ,如下所示:

const obj = JSON.parse("{" + req.body + "}");
console.log(obj);
const { products } = obj;

要不就

const { products } = JSON.parse("{" + req.body + "}");

但我强烈建议不要这样做,尤其是因为您不能使用中间件并且发送格式错误的数据往往并不理想。 相反,首先发送有效的 JSON。

它不是 JSON 对象,JSON 对象被花括号包围。

如果你返回{"products": [ { "id":"5f5065e44a12bd00232bcc6g", "status":"true" }, { "id":"5f5065e44a12bd00232bcc6g", "status":"true" } ]}

那么它将起作用。

弄清楚了。

感谢@Tj 和@Alnitak 能够解决这个问题。 用过的

let obj = req.body;

但是我的验证器有问题。

body('products')
      .trim()
      .not()
      .isEmpty()
      .withMessage('Custom product must have a main product'),

在上面的代码中,使用 .trim() 将产品转换为字符串,一旦我删除了 trim() 它就可以正常工作。 谢谢大家的想法

尝试使用 JSON.stringify()

否则,也许您正在声明一个对象 (const { products }),请尝试不使用 {}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM