在 JSON.parse 的位置 0 处获取“SyntaxError:”JSON 中的意外标记”

Posted

技术标签:

【中文标题】在 JSON.parse 的位置 0 处获取“SyntaxError:”JSON 中的意外标记”【英文标题】:getting "SyntaxError:" Unexpected token in JSON at position 0 at JSON.parse" 【发布时间】:2020-12-20 08:14:28 【问题描述】:

在从 Angular 7 中压缩为 gzip 的后端 Spring Boot 中获取数据时,获取“SyntaxError:”JSON.parse 中位置 0 处 JSON 中的意外标记”

在后端,我将对象列表压缩如下:

ArticleObj.java

public class ArticleObj
    private String id;
    private String name;
    private String heading;
    private String language;
    private String identifier1;
    private String identifier2;
    private String identifier3;
    private String identifier4;
    private String identifier5;
    private String identifier6;
    private String identifier7;
    private String identifier8;
    private String identifier9;
    private String identifier10;
    private String baseIndentifier;
    private String moduleId;
    .....
    ...

//列表大小在5000-6000左右

 List<ArticleObj> tempList=new ArrayList<ArticleObj>();
    
    String json=new Gson().toJson(tempList);
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    GZIPOutputStream gzip = new GZIPOutputStream(out);    
    gzip.write(json.getBytes());
    gzip.close();
    String outStr = out.toString("UTF-8");

在 Angular 中,我正在尝试这样做

getData()
const headers = new HttpHeaders(
      "Accept-Encoding": "gzip", "Content-Type":"application/json"
    )
return this.http.get(url,headers:headers);


this.getData().subscribe(res=> ....)

我不知道如何将 gzip 数据解压成 json 格式。我将列表压缩成 gzip 的原因是因为列表的大小超过 20mb,并且需要花费大量时间来消耗这些数据。任何人都可以在这里帮助我。

【问题讨论】:

请添加 tempList 的内容和完整的堆栈跟踪。 @Milgo,我已经更新了细节,请看一下 你仍然错过了堆栈跟踪。还要考虑使用分页。 【参考方案1】:

您应该发送 JSON 并使用 gzip compression,而不是从后端发送 zip 文件。浏览器内置了对 gzip 压缩 HTTP 响应的支持,并且会自动解压缩内容。这样您就不必自己处理解压缩,只需使用 JSON 正文即可。

请记住,gzip 会加快下载资源所花费的时间,但会占用额外的 CPU 资源来解压缩存档。

【讨论】:

@Tsvetav Ganev 如果我以 JSON 格式发送响应,请告诉我何时何地应该使用 gzip 压缩? 您必须找到一种在 Spring 中启用它的方法,但我很确定它是受支持的。也许这只是配置问题。【参考方案2】:

@Tsvetav Ganev,非常感谢您为我指明了正确的方向。我按照你说的做了,并以 JSON 格式发送了我的回复,并使用

实现了 spring boot gzip 压缩
server.compression.enabled=true 
server.compression.mime-types=application/json,application/xml,text/html,text/xml,text/plain,application/javascript,text/css
server.compression.min-response-size=2KB (2kb is default min size)

在 application.properties 文件中。

现在响应时间几乎减少了 80%。

【讨论】:

以上是关于在 JSON.parse 的位置 0 处获取“SyntaxError:”JSON 中的意外标记”的主要内容,如果未能解决你的问题,请参考以下文章

使用 JSON.parse 方法解析数据时 JSON 中位置 0 错误的意外令牌'

JSON.Parse 在 Faker.js 中将字符串解析为 JSOn 时在位置 0 显示错误

使用 Angular 下载 .xls 文件:JSON.parse (<anonymous>) 位置 0 处的 JSON 中的意外令牌 P

如何修复:JSON.parse (<anonymous>) 位置 0 处的 JSON 中的意外标记 <

NodeJs JSON.parse-SyntaxError:JSON中位置0处的意外令牌u

Angular 6:SyntaxError:JSON中意外的令牌O在JSON.parse的位置0,带有有效的JSON