質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.49%

  • iOS

    4078questions

    iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

  • Swift 2

    1334questions

    Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

  • JSONP

    31questions

    JSONP(JSON with padding)は、JSONを使用した関数呼び出しのための仕組み。クロスドメインでのデータの受け渡しが可能です。JavaScriptからクロスドメインで容易にデータを扱うことができます。

  • パース

    7questions

    パースとは、一定の文法に従って記述されたテキスト文書を解析し、データ構造の集合体に分解・変換することを呼びます。

Swift2にてJSONPをパースできない

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,018

hn_tokyo

score 63

WebAPIを叩いてJSONPを取得して、そこからパースしようとするところでうまくパースができません。

※dataにはJSONPのバイナリーデータが入っています

do {
    let array = try NSJSONSerialization.JSONObjectWithData(data!, options:NSJSONReadingOptions.MutableContainers ) as! NSArray
    print(array)
    print("成功")

} catch {                
   print("失敗")
}

で失敗してしまいます。
let array = try NSJSONSerialization.JSONObjectWithData(data!, options:NSJSONReadingOptions.MutableContainers ) as! NSArray
の部分を
let dic = try NSJSONSerialization.JSONObjectWithData(data!, options:NSJSONReadingOptions.MutableContainers ) as! NSDictionary
としてもダメでした。

どうやったらパースできるかおしえていただきたいです。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

+1

JSONPではなくJSONで取得して下さい。

JSONP to JSON(やっつけ)

//String化
let strJSONP = NSString(data: data!, encoding: NSUTF8StringEncoding)
//print(strJSONP!)
//()内だけ取り出す
let pattern = "^.*\\((.*)\\);$"
let replace = "$1"
let strJSON = strJSONP?.stringByReplacingOccurrencesOfString(pattern, withString: replace, options: .RegularExpressionSearch, range: NSMakeRange(0, (strJSONP?.length)!))
//NSData化
let dataJSON = strJSON!.dataUsingEncoding(NSUTF8StringEncoding)
do {
    let dic = try NSJSONSerialization.JSONObjectWithData(dataJSON!, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary
    print(dic)
    print("成功")
} catch {
    print("失敗")
}

私が試したJSONPはこれでいけました。
受け取っているJSONPを見て調整して下さい。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/03/24 15:55

    JSONPを取得する方法はないということでしょうか?

    キャンセル

  • 2016/03/25 08:52

    取得したJSONPの頭と尻尾に付いている不要な部分を削ればいいと思います。

    キャンセル

  • 2016/03/25 09:40

    やっつけてみました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    [Swift]JSONの取得方法

    MysqlのデータをPHPでJSONで出力し、Swiftで取得することまではできたのですが、そこから各データを解析することができません。 var url = NSURL(stri

  • 解決済

    Swift Twitter Timeline

    TwitterのTimelineをTableViewに表示したい。 var tweets = []  の空配列に(ここも配列でいいのかわからない) let result : An

  • 解決済

    Swiftにて、Extra argument 'error' in callとなり解決したいです。

    前提・実現したいことXcodeにてWebAPiを使って情報を取得したいが、エラー => Extra argument 'error' in callが生じてしまい、buildできな

  • 解決済

    Swiftに関しての質問

    皆様、質問がございます。よろしくお願い申し上げます。 やりたいこと Web APIを用いて、HTTPリクエストでjsonデータを取得すること、 けれどbuildエラーが生じていて

  • 解決済

    ツイートの投稿

    大学で卒業研究としてTwitterAPIを利用したアプリケーションを開発しています。 その過程で以下のようにツイート投稿のところで行き詰まりました。 同じようなコードでタイムラ

  • 解決済

    NSString型のデータをJSONに変換する

    Swift2でNSString型の以下のようなデータをJSONに変換するメソッドなどは無いでしょうか?できれば外部のライブラリを使わずに実現したいです。よろしくお願いします。また、

  • 受付中

    実機のテストで、JSONのパースに「Ambiguous use of 'subscript'」が出る

    Swift2でサーバからダウンロードしたJSONを分解して、辞書にセットするプログラムです。 let url = NSURL(string: "http://xxx.xxx.

  • 受付中

    Swift エラー内容がわからない…

    <わからないこと> 実行結果に出てくるこの3つのエラー?メッセージがわかりません… 検索しても、いまいちわかりませんでした。 どなたかご教授お願いします。 ・2017-

同じタグがついた質問を見る

  • iOS

    4078questions

    iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

  • Swift 2

    1334questions

    Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

  • JSONP

    31questions

    JSONP(JSON with padding)は、JSONを使用した関数呼び出しのための仕組み。クロスドメインでのデータの受け渡しが可能です。JavaScriptからクロスドメインで容易にデータを扱うことができます。

  • パース

    7questions

    パースとは、一定の文法に従って記述されたテキスト文書を解析し、データ構造の集合体に分解・変換することを呼びます。