如何在 Swift 4 ios 中编码 json 数组
Posted
技术标签:
【中文标题】如何在 Swift 4 ios 中编码 json 数组【英文标题】:How to encode jsonarray on Swift 4 ios 【发布时间】:2017-10-20 15:30:18 【问题描述】:我有一个这样的 JSON 数组
[
"value" : "temp",
"value2" : "temp2",
"value3" : "temp3",
,
"value" : "temp";
"value2" : "temp2",
"value3" : "temp3",
,
"value" : "temp",
"value2" : "temp2",
"value3" : "temp3",
]
我尝试在 swift 4 for ios app 上解析它。 我没有找到关于这个主题的任何解决方案。 我已经尝试了很多这样的代码
let jsonpars = try JSONSerialization.jsonObject(with: jsonData, options: .mutableContainers) as! [AnyObject]
【问题讨论】:
字符串不是有效的 JSON。 请搜索:There are more than 2700 related questions。在 Swift 4 中,您可以使用JSONDecoder
就像 Aris 说的 JSON 格式是错误的,所以先解决这个问题,然后再讨论
【参考方案1】:
您提供的 JSON 无效。正确的 JSON 格式应如下所示:
-
将每次出现的
=
替换为:
用逗号替换每个;
结果应该是这样的:
[
"value":"temp",
"value2":"temp2",
"value3":"temp3",
,
...
]
那么,您提供的解析代码示例应该可以正常工作了。
您的示例 JSON 看起来像解析后打印出来的内容。例如:
let jsonpars = try JSONSerialization.jsonObject(with: jsonData, options: .mutableContainers) as! [AnyObject]
print(jsonpars)
产生一个 debug 版本的 JSON 输出:
[
value = temp;
value2 = temp2;
value3 = temp3;
,
...
]
真正的 JSON,你要解析的数据,必须有冒号和逗号。
【讨论】:
【参考方案2】:使用quicktype,我为您的示例生成了这个模型和转换代码(在更正了语法问题之后):
import Foundation
struct Value: Codable
let value, value2, value3: String
extension Array where Element == Value
static func from(json: String, using encoding: String.Encoding = .utf8) -> [Value]?
guard let data = json.data(using: encoding) else return nil
return [Value].from(data: data)
static func from(data: Data) -> [Value]?
let decoder = JSONDecoder()
return try? decoder.decode([Value].self, from: data)
var jsonData: Data?
let encoder = JSONEncoder()
return try? encoder.encode(self)
var jsonString: String?
guard let data = self.jsonData else return nil
return String(data: data, encoding: .utf8)
然后你可以像这样反序列化:
let values = [Value].from(json: """
[
"value": "temp",
"value2": "temp2",
"value3": "temp3"
,
"value": "temp",
"value2": "temp2",
"value3": "temp3"
,
"value": "temp",
"value2": "temp2",
"value3": "temp3"
]
""")!
【讨论】:
以上是关于如何在 Swift 4 ios 中编码 json 数组的主要内容,如果未能解决你的问题,请参考以下文章
如何在 swift 4 中使用 JSONDecoder 从嵌套 JSON 中获取数据?
在 Swift iOS 中解码的 PHP JSON 返回空值
IOS - 如何在 Swift 3 中从 JSON 中捕获动态数组维度