【问题标题】:Convert a string encoded array into an object将字符串编码的数组转换为对象
【发布时间】:2016-08-07 15:49:08
【问题描述】:

所以我从服务器以字符串的形式获取这个数组,其中包含对象的所有坐标,如下所示:

"[[[-0.340254,51.605946],[-0.340278,51.605685],[-0.339718,51.604400],
 [-0.339280,51.603746],[-0.338915,51.603454],[-0.338657,51.603018],
 [-0.338427,51.601810],[-0.338518,51.600885],[-0.337471,51.599908],
 [-0.337378,51.599682],[-0.337456,51.599116],[-0.336860,51.597669],
 [-0.335843,51.597043],[-0.335635,51.596816],[-0.335112,51.595720],
 [-0.335232,51.594400],[-0.335057,51.593273],[-0.334827,51.592847],
 [-0.333187,51.591889],[-0.333236,51.590945],[-0.332894,51.590446],
 [-0.332727,51.589868],[-0.332791,51.589320],[-0.332638,51.589156],
 [-0.332028,51.587295],[-0.332326,51.585438],[-0.332243,51.585365],
 [-0.332292,51.585186],[-0.331651,51.582991],[-0.333713,51.581096],
 [-0.334020,51.580570],[-0.334055,51.580013],[-0.337963,51.580123],
 [-0.340047,51.579954],[-0.341778,51.579979],[-0.341883,51.579881]]]"

如何将其转换为数组? 提前谢谢!

所以我想要它的形式 [[Double]]

let objects = [[[-0.340254,51.605946],[-0.340278,51.605685],[-0.339718,51.604400],
 [-0.339280,51.603746],[-0.338915,51.603454],[-0.338657,51.603018],
 [-0.338427,51.601810],[-0.338518,51.600885],[-0.337471,51.599908],
 [-0.337378,51.599682],[-0.337456,51.599116],[-0.336860,51.597669],
 [-0.335843,51.597043],[-0.335635,51.596816],[-0.335112,51.595720],
 [-0.335232,51.594400],[-0.335057,51.593273],[-0.334827,51.592847],
 [-0.333187,51.591889],[-0.333236,51.590945],[-0.332894,51.590446],
 [-0.332727,51.589868],[-0.332791,51.589320],[-0.332638,51.589156],
 [-0.332028,51.587295],[-0.332326,51.585438],[-0.332243,51.585365],
 [-0.332292,51.585186],[-0.331651,51.582991],[-0.333713,51.581096],
 [-0.334020,51.580570],[-0.334055,51.580013],[-0.337963,51.580123],
 [-0.340047,51.579954],[-0.341778,51.579979],[-0.341883,51.579881]]]

所以如果我要做objects[0][0],它应该返回[-0.340254,51.605946]

func convert(s: String) -> [[[Double]]]{

do{

    let array = try NSJSONSerialization.JSONObjectWithData(s.dataUsingEncoding(NSUTF8StringEncoding)!, options: []) as? [[[Double]]]
    return array!

}catch{

}
return [[[]]]

}

【问题讨论】:

  • 这是一个数组。向我们展示您希望其外观的示例
  • 它是一个语音标记字符串
  • 请不要在您的问题中包含答案。如果答案解决了您的问题,请将答案标记为已接受;如果您自己解决了问题,您可以发布您自己的答案。谢谢。

标签: arrays swift multidimensional-array


【解决方案1】:

您只需要一个 3D 数组的 JSON 响应。我将您的字符串加载到 Swift REPL 中,并且能够像这样解析它:

import Foundation

let s = /* your string */
let array = NSJSONSerialization.JSONObjectWithData(s.dataUsingEncoding(NSUTF8StringEncoding)!, options: []) as? [[[Double]]] 

输出

$R3: [[[Double]]]? = 1 value {
  [0] = 36 values {
...

代码示例

func convert(s: String) -> [[[Double]]] {

    if let data = s.dataUsingEncoding(NSUTF8StringEncoding),
        let object = try? NSJSONSerialization.JSONObjectWithData(data, options: []),
        let array = object as? [[[Double]]]
    {
        return array
    }

    return [[[]]]
}

【讨论】:

  • 我是 swift 新手,所以我从来没有使用过守卫?或尝试?任何帮助,将不胜感激! :)
  • @MinhalKhan 您需要发布更多代码,以便我可以使用该上下文进行演示
  • @MinhalKhan 编写 Swift 代码时的想法是避免使用! 无条件展开,也就是尖叫。每次您的代码尖叫时,它都是潜在的崩溃。有时崩溃是可取的(即不可恢复的错误),但对于解析来自网络的数据,可能不是。
  • 是的,一直在寻找更多的材料!但是谢谢!我被困了很久!
猜你喜欢
  • 2021-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-12
  • 2021-05-09
  • 1970-01-01
相关资源
最近更新 更多