2016-10-13 6 views
0

私はこのインスタンスを持っている:いくつかの計算後スウィフト3 - [[文字列:任意]]の無効なJSONオブジェクト

var commands = [[String: Any]]() 

、その結果は次のとおりです。

[["command": 50022, "homes": [["gateways": [["mac": "845DD74B405E", "services": [["iid": 9, "name": "Some name"]], "aid": 1]], "name": "H1"]]], ["command": 50025, "services": [["mac": "845DD74B405E", "iid": 9, "aid": 1, "new_name": "Some name"]]]] 

私はそれを変換したいです( SwiftyJSON使用してJSONへcommands):

let json = JSON(commands) 
print(json) // "unknown" 

が、結果は常にunknownです。

次に、commandsの妥当性をチェックして、JSON変換可能であることを確認します。しかし、私はfalseJSONSerialization.isValidJSONObject(commands)を持っています。これは予想外です!

commands(辞書の配列)が有効なJSONオブジェクトでない理由がありますか?

おかげで私のcommands

+1

あなたの配列は有効です。 – vadian

+0

配列が有効であることに私は同意します( 'print(type:of:commands)' - > array)。しかし、私を混乱させるのは、それが有効であれば、どうやって有効なJSONオブジェクトではないのでしょうか? – quanguyen

+0

これは有効なJSONオブジェクトです。私は遊び場でそれを証明しました。 – vadian

答えて

0

問題は、整数で5002250025です。私のコードでは、enumUInt32に定義されています。それをプレイグランドにコピーして確認すると、SwiftはそれをIntに変換します。だからこそ、私はいつも遊び場で成功しています。

私のコードに戻って、Swift 3は、数字をIntにしてJSONオブジェクトに変換することができます。 Swift 2にはこのような動作がありません。

enumUInt32からIntに変更すると、それは美しく動作します。

ありがとうございました。

関連する問題