【发布时间】:2018-09-04 03:35:48
【问题描述】:
解析我的 JSON 后,我得到以下值:
myArray = "[63, 83, 87, 71]"
我怎样才能得到一个数组而不是字符串?我需要的是:
myArray = [63, 83, 87, 71]
更新:
这是我的简单 json:
{
"0": "[31,47,51]",
"1": "[74, 47, 51, 78]",
"2": "[72, 65, 69, 80]",
"3": "[63, 83, 87, 71]"
}
这是一个解析:
class gameModel: NSObject {
func getCurrentArrays() -> NSDictionary {
let appBundlePath:String? = Bundle.main.path(forResource: "testJsonPrepared", ofType: "json")
if let actualBundlePath = appBundlePath {
let urlPath:NSURL? = NSURL(fileURLWithPath: actualBundlePath)
if let actualUrlPath = urlPath {
let jsonData:NSData? = NSData(contentsOf: actualUrlPath as URL)
if let actualJsonData = jsonData {
let dict: NSDictionary? = (try? JSONSerialization.jsonObject(with: actualJsonData as Data, options: JSONSerialization.ReadingOptions.mutableContainers)) as! NSDictionary?
if let currentArrays = dict {
return currentArrays
}
}
}
}
return NSDictionary()
}
}
这是决赛:
class GameScene: SKScene {
let model = gameModel()
var arrays: NSDictionary = ["":""]
override func didMove(to view: SKView) {
arrays = model.getCurrentArrays()
print("# func viewDidLoad arrays: \(arrays)")
let testKey = String(3)
let testArray = arrays.value(forKey: testKey) as! String
print("# func viewDidLoad testArray: \(testArray)")
}
}
============
Update2 谢谢,rmaddy。这是我的解决方案:
testJson.json
{
"0": [31,47,51],
"1": [74, 47, 51, 78],
"2": [72, 65, 69, 80],
"3": [63, 83, 87, 71]
}
这里是从 json 读取的:
class GameScene: SKScene {
override func didMove(to view: SKView) {
if let path = Bundle.main.path(forResource: "testJson", ofType: "json") {
do {
let data = try Data(contentsOf: URL(fileURLWithPath: path), options: .mappedIfSafe)
let jsonResult = try JSONSerialization.jsonObject(with: data, options: .mutableLeaves)
if let jsonResult = jsonResult as? Dictionary<String, [Int]>, let array = jsonResult["3"] {
print("# func didMove array: \(array)")
}
} catch {
// handle error
}
}
}
}
【问题讨论】:
-
后端未正确编码值。您需要让后端团队修复它,自己修复后端,或者手动解析该数组。
-
是的,您需要修复 JSON。整数数组不应是 JSON 中的字符串。
-
不相关,但在 Swift 中你不应该使用
NSDictionary、NSArray、NSData、NSURL等。使用适当的 Swift 字典和数组。使用Data。使用URL。而且您可能不需要扩展NSObject。