2019-12-20

楽天のマンガ新刊APIでJSONのパース問題

JavaScript
firebase
cron

楽天ブックスでは、非公式ながら最新の発売マンガ一覧を提供してくれる 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文字目を抜く  
})  

やった!
無事パースできました。

なにこれ嫌がらせ?


猫派 / 基本インドア / ガジェット大好き / RDP推進派
コロナ禍の趣味はPC+VRでゲーム。
最近のゲーム:Factorio / BeatSaber / にゃんこ大戦争

→ Policy