在JSON.parse的位置0处获取“ SyntaxError:”意外令牌

问题描述

从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,并且花费大量时间消耗数据。任何人都可以在这里帮助我。

解决方法

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

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

,

@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%。