我正在使用 SocketIO 库将我的 iOS 应用程序连接到我的服务器。我想向服务器发送一些数据并在确认中返回一个 json 字典。我目前有这样的事情:
SocketHandler.mySocket.emitWithAck("my_event", [session, someInput]).timingOut(after: 3) {data in
let myData = try? JSONDecoder().decode(myStruct.self, from: data)
Run Code Online (Sandbox Code Playgroud)
MyStruct 被定义为继承自 Decodable 的类,类似于我期望的 json 结构。
我收到以下错误:无法将类型“Any”的值转换为预期参数类型“数据”
知道如何解决这种类型转换吗?或者我需要走一条完全不同的路线吗?
(适用于 iOS 11.3 的 Swift 4.1)
干杯!
我正在使用 Swift 4 和JSONDecoder. 我有以下结构:
struct Customer: Codable {
var id: Int!
var cnum: String!
var cname: String!
}
Run Code Online (Sandbox Code Playgroud)
注意:这些字段不能是可选的。
现在我有一个 JSON 字符串:
[
{
"id": 1,
"cnum": "200",
"cname": "Bob Smith"
},
{
"id": 2,
"cnum": "201",
"cname": null
}
]
Run Code Online (Sandbox Code Playgroud)
为了对其进行解码,我使用以下命令:
let decoder = JSONDecoder()
let customers = try decoder.decode([Customer].self, from: json)
Run Code Online (Sandbox Code Playgroud)
除了空数据被转换为 nil 之外,一切正常。我的问题是,将传入的 nil 转换为空字符串(“”)的最简单方法是什么?
我想用最少的代码来做到这一点,但我不确定正确的方法以及在什么时候可以将 nil 转换为空字符串。预先谢谢你。
我正在尝试JSON使用Alamofireand将一系列字典加载到一个对象中SwiftyJSON,但是当下载数据时,我收到错误:
keyNotFound(CodingKeys(stringValue: "inProrgresss", intValue: nil), Swift.DecodingError.Context(codingPath: [], debugDescription: "No value associated with key CodingKeys(stringValue: \"inProrgresss\", intValue: nil) (\ "inProgresss\").",underlyingError: nil))。
本地化描述只是说数据丢失。我的 JSON 在这里,我的代码是这样的:
struct CompData: Codable {
let inProrgresss: [[String: String]]
let past: [[String: String]]
let upcoming: [[String: String]]
}
func getData(url: URLConvertible) {
SVProgressHUD.show()
Alamofire.request(url).responseJSON { (dataResponse) in
if dataResponse.result.value != nil {
SVProgressHUD.dismiss()
let JSONVar = JSON(dataResponse.result.value)
let data = Data(dataResponse.data!)
print(data)
let decoder = JSONDecoder()
do {
let newData …Run Code Online (Sandbox Code Playgroud) 我目前正在使用 JSONDecoder 将 json 解析为 Swift 5 的对象。我现在才意识到 JSON 的一部分是错误的 JSON。它有一个带空格的字段名称:“帖子标题”。我不确定为什么会这样,我知道这样设置 JSON 是不好的做法,但在 JSON 方面我无能为力。有没有办法使用 JSON 解码器按原样获取该字段?
我已经对此进行了大量研究,但是由于这是一个错误的 json 问题,除了创建自定义解码器/解串器(我试图避免)之外,我在网上找不到太多东西。
JSON:
{
"Post Title":"Hello World"
}
Run Code Online (Sandbox Code Playgroud)
结构:
struct Post: Decodable {
var PostTitle: String
}
Run Code Online (Sandbox Code Playgroud)
解码器:
let jsonObject = try jsonDecoder.decode(Post.self, from: responseData)
Run Code Online (Sandbox Code Playgroud)
先感谢您!
我正在尝试使用 JSONDecoder 在 Swift 中解析一些 JSON,其中 JSON 偶尔会有空值。我想改为设置默认值。以下允许我处理它,但空值稍后会导致问题。
struct Book: Codable {
let title : String
let author: String?
}
Run Code Online (Sandbox Code Playgroud)
有没有办法做类似的事情(以下不编译),也许使用初始化程序?:
struct Book: Codable {
let title : String
let author: String ?? "unknown"
}
Run Code Online (Sandbox Code Playgroud)
感谢您的任何建议
我刚刚在 Swift 中遇到一个问题,我还没有找到解决方案:当您在 Swift 中解码 JSON 数据(来自 API)时,您必须使用 JSONDecoder 对其进行解码,但这迫使我命名我的变量名称与我想要检索的 JSON 属性完全相同 - 问题是,JSON 属性的名称中有一个破折号(“饱和脂肪_100g”)。当然,由于破折号,我不能这样调用我的变量。这个问题有什么解决办法吗?
我试图通过下面的代码解码这个json数据,但是它不起作用.
$data = 'VA_OnQueryData({"name":"John","id":"354902332592"});';
return json_decode($data);
Run Code Online (Sandbox Code Playgroud)