【问题标题】:`JSON.parse(await response.json())` throws SyntaxError: unexpected character at line 1 column 2`JSON.parse(await response.json())` 抛出 SyntaxError:第 1 行第 2 列出现意外字符
【发布时间】:2021-11-05 14:25:43
【问题描述】:

我想从 API 创建的 JSON 中恢复 age 属性,但它会引发此错误:

SyntaxError:JSON.parse: JSON 数据的第 1 行第 2 列出现意外字符

console.log(await response.json()) 提供了我所有的 JSON 数据,但是当我将其注释掉并放入最后一行代码时,就会出现此错误。

有人告诉我尝试以下方法之一:

  • response.json()["age"]
  • response.json()[age]
  • response.json().age
  • let json = JSON.parse(response);

console.log(json["age"]) 已关闭,但未成功。

let table = base.getTable("test");
let view = table.getView("Donnée brut");
let age;
let query = await view.selectRecordsAsync({
  sorts: [
    // sort by "Prénom" in ascending order...
    {
      field: "Prénom"
    }
  ]
});

// print ID & "Prénom" from each record:
for (let record of query.records) {
  let name = (record.getCellValueAsString('Prénom'));
  var response = await fetch('https://api.agify.io/?name=' + name);

  /* console.log(await response.json()); */

  let json = JSON.parse(await response.json());
  
  console.log(json["age"]);
}

【问题讨论】:

  • 你觉得response.json()response.text()有什么区别?
  • 有人告诉我尝试其中的一种” - 谁说的?这些都不起作用。你需要的是(await response.json())["age"](await response.json()).ageconst data = await response.json(); console.log(data.age)

标签: javascript json async-await fetch


【解决方案1】:

Response.prototype.json 已经解析了 JSON。 你在等待这个承诺是正确的:await response.json()。 记录时,这已经记录了您需要的解析数据:console.log(await response.json());

当您尝试 JSON.parse(await response.json()) 时,您会将对象强制转换回字符串,这会导致 "[object Object]",这是无效的 JSON,因此会出现错误消息。 删除此JSON.parse 电话。

如果您需要解析后的 JSON 的 age 属性,请使用 console.log((await response.json()).age);。 请记住,.json 返回的是 Promise,而不是解析后的对象;这就是为什么response.json().age 之类的不起作用的原因。 您需要等待读取该属性。

或者,首先将解析结果放入变量中:

// …

const result = await response.json();

console.log(result.age);

// …

【讨论】:

    猜你喜欢
    • 2023-02-08
    • 1970-01-01
    • 2016-11-19
    • 2017-04-28
    • 2019-12-27
    • 2020-09-03
    • 2016-05-25
    • 1970-01-01
    相关资源
    最近更新 更多