斯威夫特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)!
打印(dataString2)的结果是:[...],这是正确的。
号
你连载latitude
,longitude
和timestamp
作为字符串,而他们应该是数字(注意引号)。
[...]但毕竟现在的结果 “的位置:” 看起来有点怪异
那是因为你的双串行化处理dataString2
。
不要调用JSONSerialization.data
两次,而是创建一个包含所有结构化数据的大Dictionary<String, Any>
,然后在一次调用中执行序列化。
Nirav D是更快,但仍然感谢latidude int等。:)不知道为什么我让他们字符串 –
... omg谢谢!它现在的作品:D –
@SquirrelofPain欢迎队友:) –