无法在 Deno 控制器中对原始格式有效载荷执行 JSON.parse

Can't do JSON.parse for raw format payload in Deno controller

我正在创建一个 POST 方法 api 终点。我从邮递员那里以 RAW 格式将有效负载作为 JSON 字符串发送。然后我在我的 deno 应用程序控制器中做 JSON.parse。但是执行 JSON.parse 后的输出仍然是 JSON 字符串。

这是我的控制器代码:

import { IResponse } from '../models/response.ts'
import { IFulllName } from '../models/full-name.ts'

export const printFullName = async (
  { request, response }: { request: any, response: any }) => {

    const body = await request.body();
    let value = body.value;
    console.log(value, '||| value');
    console.log(typeof(value), '||| value type');

    value = JSON.parse(JSON.stringify(value));

    // This should be a JSON object but it still logs as a string

    console.log(value, '||| value');
    console.log(typeof(value), '||| value type');
}

如果我直接执行 JSON.parse 而没有 JSON.stringify,我会收到 500 内部服务器错误(日志中也没有错误)。

这是我尝试过的有效载荷:

'{"firstName": "First", "lastName": "Last"}'

注意:我将 oak 与 Deno 一起使用。

我需要的是在控制器代码中将JSON字符串转换成JSON对象。

如果有使用任何 oak 方法的内置方法,请提出建议。

您正在发送无效的 JSON 对象,在 Postman 中您应该 POST:

{"firstName": "First", "lastName": "Last"}

没有'包裹。


const postedJSON = `'{"firstName": "First", "lastName": "Last"}'`;

// Invalid JSON for JSON.parse, remove '

const stringified = JSON.stringify(postedJSON);

console.log(stringified); // a valid JSON string

console.log(JSON.parse(stringified) === postedJSON);


无论如何,在Oak中读取JSON有效负载的正确方法是:

app.use(async ({ request, response }) => {
  const result = await request.body();
  console.log(result.value)
});

一定要发Content-Type: application/json