2017-05-11 8 views
0

私は安らかな呼び出しから返されたデータ(JSON)を消費しようとしています。安心して電話からJSONをデシリアライズ

:私は次のコード行を使用して、これをデシリアライズした場合

[{"Key":"DATALOG_MAX_ID","Val":"875250","DataType":1,"Description”:”N/A.”},{“Key":"SNAPSHOT_DATALOG_ID","Val":"875259","DataType":1,"Description”:”N/A“},{“Key":"SNAPSHOT_FILE_SIZE","Val":"492590686","DataType":1,"Description”:”N/A“},{“Key":"SNAPSHOT_GEN_ID","Val":"770","DataType":1,"Description”:”N/A”},{“Key":"SNAPSHOT_LAST_UPDATED","Val":"2017-04-14 00:01:17.240","DataType":6,"Description”:”N/A“},{“Key":"SNAPSHOT_MAX_ID","Val":"374418","DataType":1,"Description”:”N/A”},{“Key":"SNAPSHOT_READY","Val":"0","DataType":4,"Description”:”N/A”},{“Key":"SNAPSHOT_REQUIRES_BUILD","Val":"1","DataType":4,"Description”:”N/A”}] 

:以下は私のコール(キー/値のペアの配列、リストの各項目について、常に4のキー/値のペア)からデータを返されます

let json = try JSONSerialization.jsonObject(with: data!, options: []) as![Dictionary<String, Any>] 

成功しますが、値は配列内の各辞書の4つのキーと値のペアのうち2つにのみ存在します。変数をステップ実行して調べると、見つからない値に対してはBuiltin.rawpointerは常に0x0になります。私は次の行を使用してデシリアライズしようとした場合

奇妙なことに、:

let json = try JSONSerialization.jsonObject(with: data!, options: []) as![MetaDataEntry] 

不思議なこと、それは成功し、私が見ることができるすべてのデータは、(スクリーンショット下記参照)があります。

これは私の作品

enter image description here

+0

多くは(誤字引用符で囲まれている例えば、 '」 N/A ")。これが問題になるか、JSONを正しくコピーしていませんか? –

+0

私が働いている組織のためデータを少し修正しなければならなかったのですが(例えば引用符で囲まれていないなど) – Paul

+0

そのJSONをhttps://jsonlint.comにコピーして貼り付けてください。 *問題。 –

答えて

1

が、私は引用符の一部を修正しなければならなかった

let jsonString = "[{\"Key\":\"DATALOG_MAX_ID\",\"Val\":\"875250\",\"DataType\":1,\"Description\":\"N/A.\"},{\"Key\":\"SNAPSHOT_DATALOG_ID\",\"Val\":\"875259\",\"DataType\":1,\"Description\":\"N/A\"},{\"Key\":\"SNAPSHOT_FILE_SIZE\",\"Val\":\"492590686\",\"DataType\":1,\"Description\":\"N/A\"},{\"Key\":\"SNAPSHOT_GEN_ID\",\"Val\":\"770\",\"DataType\":1,\"Description\":\"N/A\"},{\"Key\":\"SNAPSHOT_LAST_UPDATED\",\"Val\":\"2017-04-14 00:01:17.240\",\"DataType\":6,\"Description\":\"N/A\"},{\"Key\":\"SNAPSHOT_MAX_ID\",\"Val\":\"374418\",\"DataType\":1,\"Description\":\"N/A\"},{\"Key\":\"SNAPSHOT_READY\",\"Val\":\"0\",\"DataType\":4,\"Description\":\"N/A\"},{\"Key\":\"SNAPSHOT_REQUIRES_BUILD\",\"Val\":\"1\",\"DataType\":4,\"Description\":\"N/A\"}]" 

let data = jsonString.data(using: String.Encoding.utf8)! 
if let json = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as?[[String:AnyObject]] { 

    for row in json { 
     print(row) 
    } 
} 

出力:文字列の

["Val": 875250, "Key": DATALOG_MAX_ID, "DataType": 1, "Description": N/A.] 
["Val": 875259, "Key": SNAPSHOT_DATALOG_ID, "DataType": 1, "Description": N/A] 
["Val": 492590686, "Key": SNAPSHOT_FILE_SIZE, "DataType": 1, "Description": N/A] 
["Val": 770, "Key": SNAPSHOT_GEN_ID, "DataType": 1, "Description": N/A] 
["Val": 2017-04-14 00:01:17.240, "Key": SNAPSHOT_LAST_UPDATED, "DataType": 6, "Description": N/A] 
["Val": 374418, "Key": SNAPSHOT_MAX_ID, "DataType": 1, "Description": N/A] 
["Val": 0, "Key": SNAPSHOT_READY, "DataType": 4, "Description": N/A] 
["Val": 1, "Key": SNAPSHOT_REQUIRES_BUILD, "DataType": 4, "Description": N/A] 
+0

ありがとう、それは働いた! – Paul

+0

@Paul:だから何が問題だったのですか? –

+0

二重引用符が使われていて、キャストが間違っていたと思います。 – Scriptable

関連する問題