React jsでJsonファイルを取得したいので、これにはfetch
を使用しています。しかし、それはエラーを示しています
Uncaught (in promise) SyntaxError: Unexpected token < in JSON at position 0
エラーの可能性がある、私は手がかりを得ていません。 JSONも検証しました。
handleGetJson(){
console.log("inside handleGetJson");
fetch(`./fr.json`)
.then((response) => response.json())
.then((messages) => {console.log("messages");});
}
My Json(fr.json)
{
"greeting1": "(fr)choose an emoticon",
"addPhoto1": "(fr)add photo",
"close1": "(fr)close"
}
Content-Type
と等しくなるように、2つのヘッダーapplication/json
およびAccept
を追加します。
handleGetJson(){
console.log("inside handleGetJson");
fetch(`./fr.json`, {
headers : {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
})
.then((response) => response.json())
.then((messages) => {console.log("messages");});
}
私のために働いた解決策は次のとおりです:-私はsrcからpublicディレクトリにdata.jsonファイルを移動しました。次に、フェッチAPIを使用してファイルをフェッチしました。
fetch('./data.json').then(response => {
console.log(response);
return response.json();
}).then(data => {
// Work with JSON data here
console.log(data);
}).catch(err => {
// Do something for an error here
console.log("Error Reading data " + err);
});
問題は、reactアプリをコンパイルした後、フェッチ要求がURL " http:// localhost:3000/data.json "でファイルを検索することでした。これは実際には私のreactアプリのパブリックディレクトリです。ただし、残念ながら、react appのコンパイル中にdata.jsonファイルはsrcからパブリックディレクトリに移動されません。したがって、data.jsonファイルをsrcからパブリックディレクトリに明示的に移動する必要があります。
API(消費している)が対応するJSONを送信していないときに発生する場合があります。 404ページまたはHTML/XML応答のようなものとして応答が発生する場合があります。
このエラーは発生する可能性がありますが、実際の問題の原因となる可能性があることに注意してください。私の場合、エラー状態としてJSONに問題はありませんでしたが、1位で処理するJSONデータを取得できないという404エラーが発生し、このエラーが発生しました。
これに対する修正は、ローカルプロジェクトの.json
ファイルでfetch
を使用するために、.json
ファイルにアクセスできる必要があることでした。これは、プロジェクトのルートにあるpublic
フォルダーなどのフォルダーに配置することで実行できます。 json
ファイルをそのフォルダーに移動すると、404が200に変わり、Unexpected token < in JSON at position 0
エラーが解決されました。
私は同じエラーを受け取っていました、私にとっては、APIが文字列を返しているだけでしたが、フェッチ呼び出しではjsonを期待していました:
_response => response.json()
_
APIからjsonを返すことで問題が解決しました。APIがjsonを返さないことになっている場合、単純にresponse.json()
を実行しないでください