[解決済み】JSON文字列を辞書に変換する方法は?
2022-04-10 22:27:07
質問
Swiftのプロジェクトで、StringをDictionaryのjson形式に変換する関数を作りたいのですが、1つのエラーが発生しました。
式の型(@lvalue NSData,options:IntegerLitralConvertible ...)を変換することができない。
これは私のコードです。
func convertStringToDictionary (text:String) -> Dictionary<String,String> {
var data :NSData = text.dataUsingEncoding(NSUTF8StringEncoding)!
var json :Dictionary = NSJSONSerialization.JSONObjectWithData(data, options:0, error: nil)
return json
}
この関数はObjective-Cで作られています。
- (NSDictionary*)convertStringToDictionary:(NSString*)string {
NSError* error;
//giving error as it takes dic, array,etc only. not custom object.
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
return json;
}
解決方法は?
警告: これは、何らかの理由でJSON文字列から作業する必要がある場合に、JSON文字列を辞書に変換する便利な方法です。しかし、もしあなたがJSONの データ が利用可能な場合は、代わりに データで作業する 文字列を一切使用しない。
スイフト3
func convertToDictionary(text: String) -> [String: Any]? {
if let data = text.data(using: .utf8) {
do {
return try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]
} catch {
print(error.localizedDescription)
}
}
return nil
}
let str = "{\"name\":\"James\"}"
let dict = convertToDictionary(text: str)
スウィフト2
func convertStringToDictionary(text: String) -> [String:AnyObject]? {
if let data = text.dataUsingEncoding(NSUTF8StringEncoding) {
do {
return try NSJSONSerialization.JSONObjectWithData(data, options: []) as? [String:AnyObject]
} catch let error as NSError {
print(error)
}
}
return nil
}
let str = "{\"name\":\"James\"}"
let result = convertStringToDictionary(str)
Swift 1のオリジナル回答です。
func convertStringToDictionary(text: String) -> [String:String]? {
if let data = text.dataUsingEncoding(NSUTF8StringEncoding) {
var error: NSError?
let json = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.allZeros, error: &error) as? [String:String]
if error != nil {
println(error)
}
return json
}
return nil
}
let str = "{\"name\":\"James\"}"
let result = convertStringToDictionary(str) // ["name": "James"]
if let name = result?["name"] { // The `?` is here because our `convertStringToDictionary` function returns an Optional
println(name) // "James"
}
あなたのバージョンでは、適切なパラメータを
NSJSONSerialization
で、その結果をキャストするのを忘れていました。また、エラーが発生する可能性があるので、確認したほうがよいでしょう。最後の注意点:これは値がStringの場合のみ動作します。もし、他の型であれば、このように辞書変換を宣言した方が良いだろう。
let json = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.allZeros, error: &error) as? [String:AnyObject]
で、もちろん関数の戻り値の型も変更する必要があります。
func convertStringToDictionary(text: String) -> [String:AnyObject]? { ... }
関連
-
[解決済み] Sequelizeとnode.jsを使った一括挿入の方法
-
[解決済み] 正しいJSONコンテンツタイプは何ですか?
-
[解決済み] JSONでコメントを使用することはできますか?
-
[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?
-
[解決済み] cURLでJSONデータをPOSTするにはどうすればよいですか?
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み] Pythonで辞書に新しいキーを追加するにはどうすればよいですか?
-
[解決済み] 与えられたキーがすでに辞書に存在するかどうかをチェックする
-
[解決済み】JSONを表現するためのRedis文字列とRedisハッシュ:効率?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Golang json Unmarshal "予期せぬJSON入力の終了"
-
[解決済み] Sublime Text - JSON フォーマッタのショートカット。
-
[解決済み] PandasのDataFrameをJSON形式に変換する
-
[解決済み] BSONとは何ですか?JSONとどう違うのですか?
-
[解決済み] JsonBuilderを使用して、keyに変数名、valueにその値を指定してjsonを構築するにはどうすればよいですか?
-
[解決済み】GoでPOSTリクエストでJSON文字列を送信する方法
-
[解決済み】GoでJSONのPost Requestを処理する
-
[解決済み】mongodbでISODateを使った日付クエリが動作しないようです。
-
[解決済み】文字列のJSON配列はどのように表現するのですか?
-
[解決済み】bashスクリプトの関数で定義された変数でcurlのPOSTを使用する。