簡體   English   中英

Javasscript中JSON.parse和.json()之間的區別

[英]Difference between JSON.parse and .json() in Javasscript

我有一個簡單的angular2 http get調用,如下所示

import { Http, Response } from '@angular/http';
@Injectable()
export class ServiceBase {
  protected resource: string;
  constructor(private _http: Http) { }

  getTnCByCountryCodeNdType(countryCode: string, tncType: string) {
        let url = `${CONFIG.URL}/tnc?countryCode=${country}&tnc=${tnc}`;

        return this._http.get(url, this.getHeader())
                    .map((res: Response) => {
                        return res.json();
                    });
    }
}

收到時來自上面的錯誤響應,

我試過了

this.service
      .getTnCByCountryCodeNdType('MY', this.tnc.toLowerCase())
              .subscribe(x => {
                //
              },
              (err: Response) => {
                error = JSON.parse(err);
              });

其中:err是響應錯誤;

它拋出了通常的json錯誤。

EXCEPTION:位於0的JSON中出現意外的令牌R.

出乎我的意料

error = err.json();

工作良好。 這兩者有什么區別,為什么第一個失敗? 任何幫助表示贊賞

JSON.parse是一個JavaScript的東西。 它將包含JSON的字符串解析為該字符串所代表的任何內容。 你不傳遞它的對象。 顯然,你的err不是一個字符串。

Angular 2的http給你的reserrResponse對象,它表示它派生自Body 我在Angular 2文檔中看不到Body說的是什么,但顯然它有一個json函數,它返回將響應數據解析為JSON的結果。 這不是一個JavaScript的東西,這是來自Angular的東西。 (如上面的鏈接中所述,它的靈感來自 - 但不一樣 - fetch 。)

JSON.parse需要一個JSON格式的字符串,但是你給它一個Response對象,它不是JSON,因此解析錯誤。

res.json()從Response對象中提取JSON格式的數據,並將數據轉換為JavaScript對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM