【问题标题】:Returned value is an object and not an array, Node.js and Postman返回值是一个对象而不是数组,Node.js 和 Postman
【发布时间】:2021-07-31 07:19:52
【问题描述】:

所以我在 Postman 上尝试了一个非常简单的查询,如下所示:

邮递员的 JSON 输入

 {
        "id" : ["M","N"]
}

我想从 Cosmos DB 服务器取回多个 id,所以我使用了一个包含多个 id 的数组。

现在这是我从用户那里获取数据的 API 的开始:

let c_id: any = req.body.id;
console.log(c_id)
console.log(typeof(c_id))

//let c_id1 = JSON.parse(c_id)
//console.log(c_id1)
//console.log(typeof(c_id1))

现在我希望从 Postman 中返回的是数组,但我不断返回一个对象。

更让我困惑的是console.log(c_id) 语句将其打印为对象

console.log 输出

[ 'M', 'N' ]      //console.log(c_id) output
object           //console.log(typeof(c_id)) output

我不明白这里到底发生了什么。如何将数据作为数组取回?

复制问题的步骤:

  1. 只需在 Postman 上使用键值对创建一个 POST 请求,其中数组是值
  2. 在您的 API 中创建一个 id 请求并在控制台记录输出

我尝试过的:

  1. 因为它返回了一个对象,所以我尝试解析它,但返回一个错误。

JSON 中位置 0 的意外标记 MSyntaxError:JSON 中位置 0 的意外标记 M

  1. 我尝试使用 just as 数组,但没有得到预期的输出。

【问题讨论】:

  • JavaScript 中没有“数组”类型。当您执行typeof([]) 时,您会得到"object"
  • 也就是说,您可能想JSON.stringify()您的响应数据。很难说,因为你没有显示你的服务器端代码。

标签: javascript node.js arrays json azure-cosmosdb


【解决方案1】:

在 javaScript 中 typeof 数组是检查数组的对象,您可以使用 Array.isArray

样本:

Array.isArray(["M","N"]);  // true

【讨论】:

    【解决方案2】:

    这是应该的。数组是对象。您甚至可以在浏览器的控制台中尝试:

    const a  = [1,2,3];
    console.log(typeof(a));
    

    或者只是:

    console.log(typeof([1,2,3]));
    

    这些将在控制台中产生相同的结果,即 'object'

    查看运算符 typeof 的工作原理。由于数组和其他非基元 (Maps, Sets, Date objects, RegExps) 从 Object 类继承,因此 typeof 运算符在您的情况下会产生正确的结果。

    如果您需要检查您是否获得了一个数组,您可以检查您的对象是否具有仅属于所需对象类型的方法或属性,例如:

    typeof([].length) == 'number'
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-06
    • 1970-01-01
    • 2019-05-18
    • 2017-05-29
    • 1970-01-01
    • 2011-11-13
    • 1970-01-01
    相关资源
    最近更新 更多