【问题标题】:Swift 3 Dictionary JSONSwift 3 字典 JSON
【发布时间】:2017-07-18 00:40:48
【问题描述】:

在学校,我们正在创建一个跟踪帆船比赛的程序。

我目前正在为帆船队开发 GPS 追踪器应用程序。 发送到我们 Api 的 JSON 必须如下所示:

{"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)

print(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\"}]"}

没有这些额外的 " 和 \ 它是正确的,但我只是不知道如何构建它。

我正在使用带有 Xcode 8.2.1 的 Swift 3

【问题讨论】:

    标签: json swift dictionary


    【解决方案1】:

    最后制作 JSON 字符串意味着不要从数组位置创建 JSON 字符串,而不是使用您的 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)!
    

    【讨论】:

      【解决方案2】:

      print(dataString2) 的结果是:[...] 这是正确的。

      没有。

      您将latitudelongitudetimestamp 序列化为字符串,而它们应该是数字(注意引号)。

      [...] 但现在 "positions:" 之后的结果看起来有点奇怪

      那是因为你双重序列化dataString2

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

      【讨论】:

      • Nirav D 更快,但仍然感谢 int 的 latidude 等 :) 不知道为什么我把它们做成字符串
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-29
      • 1970-01-01
      • 2017-09-20
      • 2017-07-14
      • 1970-01-01
      相关资源
      最近更新 更多