首页 > 解决方案 > 无法对 Deno 控制器中的原始格式有效负载执行 JSON.parse

问题描述

我正在创建一个 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.stringify 的情况下直接执行 JSON.parse,我会收到 500 内部服务器错误(日志中也没有错误)。

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

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

注意:我使用橡木和 Deno。

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

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

标签: typescriptdenooak

解决方案


您正在发送一个无效的 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);


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

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

一定要寄Content-Type: application/json


推荐阅读