楽天のマンガ新刊APIでJSONのパース問題
楽天ブックスでは、非公式ながら最新の発売マンガ一覧を提供してくれる API があります。
node.js
で取得するコードは簡単なのですが、何度やっても JSON パースエラーになります。
const rp = require('request-promise')
const url =
'https://books.rakuten.co.jp/event/book/comic/calendar/2019/11/js/booklist.json'
rp.get(url, options).then(function(body) {
JSON.parse(body) // ここでエラーになる
})
うーん、レスポンスのテキストをコピーして JavaScript オブジェクト作ってもエラーにならないのに・・・?
エラー情報を読み解いてみる
error Unexpected token in JSON at position 0
と出ているので、文字になんか問題がありそうです。
とりあえず先頭から文字コードを出力して確認してみます。
for (let i = 0; i < 5; i++) {
console.log(i, json.charCodeAt(i))
}
0 65279
1 123
2 13
3 10
4 13
おや。1 文字目に変なのがいる。
1文字目は要らないんじゃない?
ってことで、1文字目を抜いてパースしてみました。
rp.get(url, options).then(function(body) {
JSON.parse(body.substr(1)) // 1文字目を抜く
})
やった!
無事パースできました。
なにこれ嫌がらせ?