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

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

ただいまの
回答率

90.49%

  • PHP

    20792questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • Swift

    7459questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

  • Swift 2

    1334questions

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

  • JSON

    1196questions

    JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

  • パース

    7questions

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

SWIFTでJSONデータをパースする際にキャストエラーになる

解決済

回答 2

投稿

  • 評価
  • クリップ 1
  • VIEW 334

KKK_

score 21

やりたいこと
SWIFT初心者です。
以下の様なデータをPHPから受け取りパースしたいと考えておりますが、
キャストできない旨のエラーとなります。
解決策をご教示ください。

([{"CUSTOMERNO":1,"PETNAME":"\u30d5\u30e9\u30f3"},{"CUSTOMERNO":2,"PETNAME":"\u592a\u90ce"},{"CUSTOMERNO":3,"PETNAME":"Mike"},{"CUSTOMERNO":4,"PETNAME":"5S"},{"CUSTOMERNO":5,"PETNAME":"\u30b7\u30e5\u30ec\u30c7\u30a3\u30f3\u30ac\u30fc"}]

エラー内容
Could not cast value of type '__NSArrayI' (0x10afaddd8) to 'NSDictionary'

ソース

self.json = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as! NSDictionary
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

checkベストアンサー

0

エラーメッセージ読んでますか?
as! NSDictionaryではなくas! NSArrayにしてみて下さい。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/09/12 15:24

    NSArrayにしてみたのですがCannot assign value of type 'NSArray' to type 'NSDictionary'となったため使用できないものと思っておりました。

    キャンセル

  • 2017/09/12 15:26

    self.jsonの型がNSDictionaryなのでは?

    キャンセル

  • 2017/09/12 15:35

    恥ずかしながらご指摘どおりでした。
    ありがとうございました。

    キャンセル

0

JSONが辞書の配列なので取得できるものも辞書の配列です。

let j = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as? [[String: Any]]      

強制アンラップやそれに準ずるものは使わない方がいいですよ。
Swiftのメリットを殺しています。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/09/12 15:24

    記載いただいたコードを書くとCannot assign value of type '[[String : Any]]?' to type 'NSDictionary'となってしまいます。

    キャンセル

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

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

関連した質問

  • 解決済

    iOSのSwiftでalamofireを使いjsonをパースする方法。

    はじめましていまSwiftとAlamfireを使いjsonをパース使用としています。 戻り値をパースしようとしているのですが、やり方がわかりません。 どなたかわかる方に教えてい

  • 解決済

    JSONファイルを取り込んで、配列に変換したい(swift3.0)

    前提・実現したいこと はじめまして、独学でswiftでiosアプリを作っており、初めて質問させていただきます。 自分で検索して、コードを調べたのですが、うまくいきません。 J

  • 解決済

    【swift】dataTask(with: request, completionHandler: ...

    swift2で書かれた下記コードをswift3でビルド使用とすると、 dataTask(with: request, completionHandler: の部分で 「Ca

  • 受付中

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

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

  • 解決済

    SWIFTでJSONの読み込み

    SWIFTでPHPから返ってきたJSONのデータを受け取りたいのですが、うまくいきません。 サイトで調べて以下のようなコードを記しました。 var json = JSONS

  • 解決済

    SwiftでJSONのパース

    entities =     { description =         { urls =             ( { "display_url" = "test.

  • 受付中

    SwiftでJSONをパース

    { "next_cursor" = 0; "next_cursor_str" = 0; "previous_cursor" = 0; "previo

  • 解決済

    SwiftでJSONをパースしたい

    現在、SwiftでJSONをパースしてRealmに保存、そして画面遷移してからtextなどにRealmから取り出したJSONデータを表示するようにしたいのですが、JSONを辞書型に

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

  • PHP

    20792questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • Swift

    7459questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

  • Swift 2

    1334questions

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

  • JSON

    1196questions

    JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

  • パース

    7questions

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