2017-07-28 18 views
0

JSON文字列を配列に変換しようとしています。 JSON文字列は次のとおりです。JSONから配列への変換

[ 
    { 
    "field_value" : "28 Aug 2017", 
    "field_data_type_combo_value" : "", 
    "field_data_type_category_id" : "1", 
    "form_id" : "19", 
    "field_id" : "133", 
    "message_unique_id" : "7941501245582800298", 
    "field_data_type_combo_id" : "0", 
    "field_data_type_id" : "1" 
    }, 
    { 
    "field_value" : "", 
    "field_data_type_combo_value" : "", 
    "field_data_type_category_id" : "9", 
    "form_id" : "19", 
    "field_id" : "134", 
    "message_unique_id" : "7941501245582714588", 
    "field_data_type_combo_id" : "0", 
    "field_data_type_id" : "26" 
    }, 
    { 
    "field_value" : "hk", 
    "field_data_type_combo_value" : "", 
    "field_data_type_category_id" : "6", 
    "form_id" : "19", 
    "field_id" : "135", 
    "message_unique_id" : "7941501245582699681", 
    "field_data_type_combo_id" : "0", 
    "field_data_type_id" : "17" 
    } 
] 

と私の変換コードは、変換結果は常にnilで

if let data = text.data(using: .utf8) { 
    do { 
     return try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String : AnyObject] 
    } catch { 
     print(error.localizedDescription) 
    } 
} 

です。私はまた、オンラインJSONビューアのJSON文字列とその文字列が正しいことを確認しました。私を助けてください。

+0

なぜ '.mutableContainers'を渡しますが、結果を不変の定数に代入するのですか? – vadian

答えて

1

あなたが明示的にあなたの呼び出しで書く:つまり

as? [String: AnyObject] 

を、あなたはそれが文字列で辞書であることを確認し、JSONを返すものは何でも取るためにスウィフトを頼みますその辞書かnilかを返します。あなたのデータは辞書ではなく配列なので、nilを返します。あなたが求めたものとまったく同じですが、あなたが望むものではありません。

あなたが期待しているのは、辞書ではなく辞書です。また、AnyObjectの代わりにAnyを使用する必要があります。配列内の項目は文字列キーと任意の値を有する辞書でなければならない意味する:それは[]アウター

as? [[String: Any]] 

を用いて変換することは、アレイ、インナー[任意の文字列]があることを意味します。

なぜ、.mutableContainersを使用していますか?あなたが説明することができる正当な理由がある場合は、それを使用してください。あなたがしていない場合は、どこかからコードをコピーして、それを削除してください。

1

jsonはトップレベルの辞書ではなく配列です。 [ ... ]から、{ ... }の場合は辞書になります。対応するキャストを使用してコードを修正:

return try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [AnyObject] 
+0

ありがとう。なぜ今はうまく働いているのですか?オプション(値) –

+0

のように@TestTestは 'のように'テストしました。 '' let ... 'でラップしようとしました。 – luk2302

+0

良い仲間..助けてくれてありがとう。として?文字列。今はうまく動作します。 –

関連する問題