Angular 如何';http.get';准JSON(JSONC)配置文件(非纯JSON)

Angular 如何';http.get';准JSON(JSONC)配置文件(非纯JSON),angular,Angular,创建Angular2应用程序时,我希望维护一个配置文件(带有注释),该文件在运行时根据Matt Tester的回答加载,但我使用JSONC代替JSON,因为注释在配置文件中很重要(至少在源代码中维护的副本中) 注意:VS代码有一个“带注释的JSON”(JSONC)模式。JSONC模式用于VS代码配置文件,如tsconfig*.json和launch.json。在JSONC模式下,可以使用单行(//)和块注释(//**)。当前编辑器模式在编辑器的状态栏中指示。这不是一个新奇的概念,所以我不认为我只

创建Angular2应用程序时,我希望维护一个配置文件(带有注释),该文件在运行时根据Matt Tester的回答加载,但我使用JSONC代替JSON,因为注释在配置文件中很重要(至少在源代码中维护的副本中)

注意:VS代码有一个“带注释的JSON”(JSONC)模式。JSONC模式用于VS代码配置文件,如tsconfig*.json和launch.json。在JSONC模式下,可以使用单行(//)和块注释(//**)。当前编辑器模式在编辑器的状态栏中指示。这不是一个新奇的概念,所以我不认为我只是疯了

问题在于,通用的http.get()(例如,
this.http.get('../assets/config.json').subscribe({console.log('get()complete');})
似乎会自动运行json.parse(),因此在检索到的config.json文件中遇到注释时自然会抛出错误

我的第一个倾向是找出要添加到get()中的HTTP头,使其成为纯文本,然后执行一些方法,在处理之前去掉注释,将其转换为正确的JSON,但这似乎有点黑客味


解决这个问题的正确方法是什么?是否有一些方法可以在JSONC文件被提供时“取消引用”它?或者有一些脚本可以在运行时创建一个清理副本并将请求映射到清理版本?或者有没有一种方法可以用一些(我想)JSONC.parse()替换JSON.parse()?或者是否有其他惯用方法处理此问题?

在get()调用本身()中设置响应类型,而不是在get()中提供的头中设置响应类型,以指定要返回的内容:

阻止自动JSON.parse()的部分是get()中的此参数:

{responseType:'text'}

上面的get()以纯文本的形式检索已注释的JSON,然后在将“净化”(读取:符合规范)JSON提供给JSON.parse()之前,我将使用这些注释进行剥离。它工作得很好

(注意,从准JSON配置文件中剥离注释也是一个同样好的选择。

根据它是否确定响应类型为JSON,就像它将自动解析一样。您可以使用“httpClient.request”告诉它不要这样做,并为响应类型传递一个参数
const stripJsonComments = require('strip-json-comments');  //$ npm install strip-json-comments
[...]

this.http.get('../assets/config.jsonc', { responseType: 'text' }).subscribe(response => {
      var jsonConfig = JSON.parse(stripJsonComments(response));
      console.log(jsonConfig);
    });