You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

读取SNS Topic文件遇JSON解析错误:TS2339类型异常排查

解决读取SNS Topic文件时的TS2339错误及JSON解析问题

问题分析

你遇到的TS2339: Property 'Records' does not exist on type 'string'错误,根源有两个:

  • readFile读取返回的data是字符串类型,直接访问data.Records不符合TypeScript的类型规则,字符串不存在该属性。
  • 存储SNS Topic的文件内容格式不合法,仅包含"Records": [...]结构,缺少外层包裹的大括号,无法直接通过JSON.parse解析为有效JSON对象。

修复方案

1. 修正文件格式(推荐)

将文件内容补全为标准JSON结构,给"Records": [...]添加外层大括号:

{
  "Records": [...]
}

2. 调整代码逻辑

场景1:已修正文件格式

先将读取到的字符串解析为JSON对象,再逐层访问目标属性:

import { readFile } from "fs";

readFile("./regex", "utf-8", (err, data) => {
  if (err) {
    console.error(err);
    return;
  }
  // 先解析字符串为JSON对象
  const snsData = JSON.parse(data);
  // 若Sns.Message是JSON字符串,需二次解析;若为普通文本则去掉JSON.parse
  const messageText = JSON.parse(snsData.Records[0].Sns.Message);
  console.log(messageText);
});

场景2:无法修改文件格式

如果不能调整文件内容,可在代码中手动补全JSON格式后再解析:

import { readFile } from "fs";

readFile("./regex", "utf-8", (err, data) => {
  if (err) {
    console.error(err);
    return;
  }
  // 给不完整的内容包裹大括号,转为合法JSON字符串
  const validJsonStr = `{ ${data} }`;
  const snsData = JSON.parse(validJsonStr);
  const messageText = JSON.parse(snsData.Records[0].Sns.Message);
  console.log(messageText);
});

额外优化(TypeScript类型约束)

为避免后续类型报错,可给解析后的对象定义类型:

interface SnsMessageInfo {
  // 根据实际Message结构定义属性
}

interface SnsRecord {
  Sns: {
    Message: string;
  };
}

interface SnsData {
  Records: SnsRecord[];
}

// 解析时指定类型
const snsData = JSON.parse(data) as SnsData;
const messageText = JSON.parse(snsData.Records[0].Sns.Message) as SnsMessageInfo;

内容的提问来源于stack exchange,提问作者Shaun Turner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 22:30:49