斯威夫特3字典JSON

问题描述:

在学校我们正在创建一个程序来跟踪帆船赛。斯威夫特3字典JSON

我目前正在为帆船队开发GPS追踪器应用程序。 的JSON发送到我们的API必须是这样的:

{"hash":"asdh832","positions":[{"longitude":13.340532999999999,"latitude":52.4965431,"time":1488182463461},{"longitude":13.3175489,"latitude":52.4927039,"time":1488195535705},{"longitude":13.3175489,"latitude":52.4927039,"time":1488195536657}]} 

首先哈希在一个阵列的团队和位置(如果智能手机不具有互联网连接的ATM稍后发送它们)

我有一个 “位置” 阵列字典:

var positions = Array<Dictionary<String,String>>() 
      positions.append( ["longitude":String(location.coordinate.longitude), 
           "latitude":String(location.coordinate.latitude), 
           "time":String(Int64(location.timestamp.timeIntervalSince1970 * 1000.0))]) 

// Times 2 to test 
      positions.append( ["longitude":String(location.coordinate.longitude), 
           "latitude":String(location.coordinate.latitude), 
           "time":String(Int64(location.timestamp.timeIntervalSince1970 * 1000.0))]) 

    let data2 = try JSONSerialization.data(withJSONObject: positions, options: []) 
       let dataString2 = String(data: data2,encoding: String.Encoding.utf8)! 
       print(dataString2) 

打印的(dataString2)其结果是:

[{"latitude":"52.4965211222075","longitude":"13.3405919673345","time":"1488194768467"},{"latitude":"52.4965211222075","longitude":"13.3405919673345","time":"1488194768467"}] 

这是正确的。现在我想将它与哈希合并:

let params: Dictionary<String, String> = ["hash":"asdh832","positions": dataString2] 
      let data = try JSONSerialization.data(withJSONObject: params , options: []) 
      let dataString = String(data: data,encoding: String.Encoding.utf8)! 

,但现在的结果后“的位置:”看起来有点怪异:

{"hash":"asdh832","positions":"[{\"latitude\":\"52.4966040328522\",\"longitude\":\"13.3402242104124\",\"time\":\"1488195406482\"},{\"latitude\":\"52.4966040328522\",\"longitude\":\"13.3402242104124\",\"time\":\"1488195406482\"}]"} 

没有这些额外的“和\这将是正确的,但我只是不知道如何建立像这样。

我使用的是斯威夫特3 Xcode的最后手段8.2.1

使JSON字符串请不要从阵列位置JSON字符串,而不是说设置Ar与您的params字典键positions,而不是设置字符串。

var positions = Array<Dictionary<String,String>>() 
positions.append(["longitude":String(location.coordinate.longitude), 
        "latitude":String(location.coordinate.latitude), 
        "time":String(Int64(location.timestamp.timeIntervalSince1970 * 1000.0))]) 


positions.append(["longitude":String(location.coordinate.longitude), 
        "latitude":String(location.coordinate.latitude), 
        "time":String(Int64(location.timestamp.timeIntervalSince1970 * 1000.0))]) 

//Now set this positions array with positions key in params dictionary 
let params: Dictionary<String, Any> = ["hash":"asdh832","positions": positions] 
let data = try JSONSerialization.data(withJSONObject: params , options: []) 
let dataString = String(data: data,encoding: String.Encoding.utf8)! 
+0

... omg谢谢!它现在的作品:D –

+0

@SquirrelofPain欢迎队友:) –

打印(dataString2)的结果是:[...],这是正确的。

你连载latitudelongitudetimestamp作为字符串,而他们应该是数字(注意引号)。

[...]但毕竟现在的结果 “的位置:” 看起来有点怪异

那是因为你的双串行化处理dataString2

不要调用JSONSerialization.data两次,而是创建一个包含所有结构化数据的大Dictionary<String, Any>,然后在一次调用中执行序列化。

+0

Nirav D是更快,但仍然感谢latidude int等。:)不知道为什么我让他们字符串 –