簡體   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