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

如何从Amplify获取的S3对象中提取JSON数据?

解决Amplify S3下载JSON时Uint8Array解析问题

嘿,我懂你碰到的这个麻烦!直接处理Uint8Array确实容易踩坑——问题根源在于你没把二进制字节数组正确解码成UTF-8格式的字符串,直接用toString()或者JSON.parse()自然会失败。

正确处理步骤

当你通过Storage.get并设置download: true获取对象时,返回的Body是二进制字节数组(Uint8Array),必须先把它解码成JSON格式的字符串,再解析成可访问的JSON对象。这里推荐用现代浏览器都支持的TextDecoder API,它能精准处理UTF-8编码的字节:

修改后的代码示例

export function amplify() { 
  let key = "68a92d44-f25a-4bd8-9543-cc95369ae9a0"; 
  return Storage.get(key + ".json", { download: true }) 
    .then(function(result) { 
      // 初始化UTF-8解码器
      const textDecoder = new TextDecoder('utf-8');
      // 将Uint8Array解码为JSON字符串
      const jsonString = textDecoder.decode(result.Body);
      // 解析字符串为可操作的JSON对象
      const jsonData = JSON.parse(jsonString);
      
      // 现在就能正常访问name、meta等属性了
      console.log('name属性值:', jsonData.name);
      console.log('meta属性值:', jsonData.meta);
      
      return jsonData;
    }) 
    .catch(err => console.error('获取或解析数据失败:', err)); 
}

为啥之前的方法行不通?

  • 直接调用result.Body.toString():Uint8Array的默认toString()方法不会把字节转换成可读字符串,只会返回"[object Uint8Array]"或者乱码,自然无法解析成JSON。
  • 直接JSON.parse(result.Body):JSON.parse要求输入是字符串,传入字节数组会被强制转换成上面的无效字符串,所以会抛出解析错误。

备选兼容方案(适配旧环境)

如果需要兼容不支持TextDecoder的旧浏览器,可以用Blob+FileReader组合处理:

export function amplify() { 
  let key = "68a92d44-f25a-4bd8-9543-cc95369ae9a0"; 
  return Storage.get(key + ".json", { download: true }) 
    .then(function(result) { 
      return new Promise((resolve, reject) => {
        const blob = new Blob([result.Body], { type: 'application/json' });
        const reader = new FileReader();
        reader.onload = () => {
          const jsonData = JSON.parse(reader.result);
          resolve(jsonData);
        };
        reader.onerror = reject;
        reader.readAsText(blob);
      });
    }) 
    .catch(err => console.error('获取或解析数据失败:', err)); 
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:40:10