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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Swift

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

Q&A

解決済

3回答

1550閲覧

Swift:NSKeyedArchiver.archivedDataメソッドでjsonをシリアライズしたい。

masa_engineer

総合スコア14

Swift

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

0グッド

0クリップ

投稿2017/04/19 00:39

NSKeyedArchiver.archivedDataメソッドでjsonをシリアライズしたいです。
###質問1:そもそもjsonをシリアライズ可能か?
自分の予想:archivedDataメソッドはany型を引数にとるので可能と解釈しています)

そうすればサーバ側のphpでjson_decode関数を使えば
連想配列としてデコードできると解釈しています。
http://php.net/manual/ja/function.json-decode.php

###質問2:swiftでどうjsonを書けばいいのか?
ところが、swiftでのjsonの書き方がわかりません。

予想:
let json = {
"id" : 1,
"name" : "taro"
}
という書き方でOKと予想しています。

質問1、2それぞれ回答よろしくお願い致します。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fuzzball

2017/04/19 00:47

JSONって文字列なのでは?
masa_engineer

2017/04/19 02:10

JSONは「形式、ルール、表記方法」と解釈していました。が、実質はプログラムで見たら文字列だよね?ということでしょうか?
fuzzball

2017/04/19 02:17

実質はというか、文字列(テキスト)以外の何物でもありません。あなたが質問2に書いている let json = ... のjsonはString型ではなくDictionary型ですよね?
guest

回答3

0

ベストアンサー

質問1:そもそもjsonをシリアライズ可能か?

シリアライズという意味ではNSKeyedArchiverでできますが、通常これでできるのはJSONとはなんら関係ありません。
phpのjson_decodeでデコードできるようにするにはJSONSerializationを使用します。

質問2:swiftでどうjsonを書けばいいのか?

多分やりたいことはこんな感じでしょうか?

Swift

1let dict: [String: Any] = ["id": 1, "name": "taro"] // 普通のDictionary. これをJSON文字列のDataにする 2let jsonData: Data = try! JSONSerialization.data(withJSONObject: dict) 3// jsonDataがどうなってるかみてみる 4let jsonString: String = String(data: jsonData, encoding: .utf8) ?? "" 5print("\(jsonString)") // => {"id":1,"name":"taro"}

投稿2017/04/19 01:49

u39ueda

総合スコア950

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

masa_engineer

2017/04/19 02:08

素早い回答ありがとうございました!すごくうれしいです! 上の2行が肝で、下2行はデバックですね。 jsonDataというData型の変数に シリアライズされたディクショナリ型の変数dictが代入されていると。 後はAlamofire(ライブラリ)でサーバ側にリクエストを送れば phpがdecodeできそうですね!
guest

0

自分の予想:archivedDataメソッドはany型を引数にとるので可能と解釈しています)

可能ですが、archivedData はSwiftのData型を返しますので、

そうすればサーバ側のphpでjson_decode関数を使えば

連想配列としてデコードできると解釈しています

できません。マニュアルを見たところ、

JSON エンコードされた文字列を受け取り、それを PHP の変数に変換します

とありますので文字列を渡してやってください。

投稿2017/04/19 01:16

TakeoAsai

総合スコア880

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

そもそもjsonをシリアライズ可能か?

jsonが何を意味しているのか不明瞭ですが、StringにしろArrayにしろDictionaryにしろ、NSKeyedArchiverによるシリアライズは可能です。

swiftでどうjsonを書けばいいのか?

swift

1let json = "{\"id\" : 1, \"name\" : \"taro\"}" 2print(json) 3//=> {"id" : 1, "name" : "taro"}

投稿2017/04/19 00:51

編集2017/04/19 00:52
fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問