gpt4 book ai didi

ios - 在 Swift 中将 socket.io 数据转换为 JSON

转载 作者:行者123 更新时间:2023-11-28 15:13:03 24 4
gpt4 key购买 nike

我正在编写一个 socket.io 客户端,但我无法将发出的数据转换为任何可用格式。

我的处理程序是:

socket.on("foriEvent") { data, ack in
print(data)
}

打印:

[  
{
"foriEvent":{
"eventType":"location",
"state":"moving",
"latitude":"60.4413407",
"longitude":"22.2476208",
"accuracy":"20",
"ts":1510653600189
}
}
]

我有一个“看起来”像该数据的 Struct,我想使用类似这样的东西,其中 from 对象的类型是 Data

let decoder = JSONDecoder()
let foriEvent = try decoder.decode(ForiEvent.self, from: data)

目前我正在使用以下方法获取数据对象,但是当我将它发送到 decoder.decode 时,我收到以下错误消息:

return try JSONSerialization.data(withJSONObject: json, options: JSONSerialization.WritingOptions.prettyPrinted)
error trying to convert data to JSON typeMismatch(Swift.Dictionary<Swift.String, Any>, 
Swift.DecodingError.Context(codingPath: [], debugDescription:
"Expected to decode Dictionary<String, Any> but found an array instead.", underlyingError: nil))

这可能是我的结构吗?它应该是什么样子? Struct 现在看起来像这样:

struct ForiEvent : Codable {
var eventType: String?
var state : String?
var latitude: String?
var longitude : String?
var accuracy : String?
var timeStamp : CLong?
}

struct ForiData : Codable {
var foriEvent : ForiEvent?
}

最佳答案

我为此使用 swiftyjson。它做得很好。

您还没有定义数据的类型,但如果它是一个看起来像是来自您的打印命令的字符串,那么您可以执行此操作。

    guard let dataFromString = data[0].data(using: String.Encoding.utf8, allowLossyConversion: false) else {return}
var swiftyJson:JSON!
do {
swiftyJson = try JSON(data: dataFromString)
} catch {
print("Error JSON: \(error)")
}

这将为您提供 JSON 格式的数据,您可以使用 swiftyjson 轻松地将其解析为上面概述的自定义类型。 Codable 可能不起作用的原因是因为您的 JSON 作为 JSON 数组返回。

试试这个

let tempVar = swiftyJson["foriEvent"]["eventType"].string
print("test \(tempVar)")

关于ios - 在 Swift 中将 socket.io 数据转换为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47316359/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com