2017-05-20 3 views
1

私はそうのよう()でカプセル化されたJSONレスポンスで動作するようにしようとしています:角2のJSON httpレスポンスの文字を削除しますか?

({ 
    "status": "ok", 
    "messages": { 
    "generalMessages": [], 
    "recordMessages": [] 
    }, 
    "foundRows": 2029 
}) 

そして、私は次のエラーを取得する:

Unexpected token (in JSON at position 0

これはので.map(response => response.json().status);のようなことをやってから私を防ぎ有効なJSONではありません。私が試してみました何

:角1.5ではが、私は次のようでこれを解決:角2でそれを行うには、

(angular.fromJson(response.data.substr(1, response.data.length - 2), true)) 

しかし、私がその後、テキストにそれを変換する必要があるとようですJSONに戻って、完全にフォーマットをマングリングします。

私の質問: はどのように私は私の最後に()を除去し、JSONなどの新しい結果で作業することができますか?

+0

はい。これは有効なjsonデータではないためです。 Jsonは '[]'と '{}'のみ許可します – Aravind

+0

私はそれを理解しています。しかし、私はサーバーが返すものを制御しません。だから私は私の最後にJSONとしてそれを扱うことができるようにそれらの文字を削除することはできますか? –

+2

これは悪い習慣です。文字列ではなくjsonオブジェクトまたはxmlオブジェクトで作業してください。 – Aravind

答えて

2

あなたがResponseから.text()メソッドを使用して、確認応答が「テキスト」であるとことを確認するために、私はあなたが(そしておそらく必要があります)その上で展開することができたと平野JSON.parse

.map(
    response => JSON.parse(
    response.text().substring(1, response.text().length - 2 
)['status'] 
) 

を使用することができますそれはあなたが実証する不正な種類です。

しかし、あなたが以前にテキスト応答を操作していただけの場合、今はそれをやめることは何もありません。 iPadで

+0

@GraysonKentあなたは 'text()'と言っていたと思います。興味深いのは、ドキュメンテーションが '.toString()'を呼び出すことを想定していることを引用しているからです。 –

-1

data.slice(1、data.length-1)についてはどう.toJSON()

、その構文はかなり右ではないかもしれません。

+3

これは解析するまではまだ "文字列"ですが、 "配列"ではありません。また、配列や文字列に '.toJSON()'というものはありません。 –

+1

文字列はスライスすることができます[リンク](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/slice)とはい、私のエラー - toJsonは日付objです –

関連する問題