给定的数据不是有效的 JSON
Posted
技术标签:
【中文标题】给定的数据不是有效的 JSON【英文标题】:The given data was not valid JSON 【发布时间】:2022-01-22 04:55:08 【问题描述】:当我在终端中仅使用 URL 发出 curl 请求时,它工作正常,但是当我尝试使用 URLSession 执行它时,它失败并且似乎没有检索到任何数据。
我的 JSON 结构是这样的:
"access_token": "x123",
"expires_in": 3599,
"scope": "x123",
"token_type": "Bearer"
这是我的服务文件:
struct Welcome: Codable
let tokens: [Token]
struct Token: Codable
let accessToken: String
let expiresIn: String
let scope: String
let tokenType: String
enum CodingKeys: String, CodingKey
case accessToken = "access_token"
case expiresIn = "expires_in"
case scope
case tokenType = "token_type"
class RefreshToken: ObservableObject
@Published var refreshToken = [Token]()
func getRefresh()
guard let url = URL(string: "url-redacted") else return
var request = URLRequest(url: url)
URLSession.shared.dataTask(with: request) (theData, response, error) in
guard error == nil else print(error!.localizedDescription); return
// guard let data = data else print("empty data"); return
let theData = try! JSONDecoder().decode(Welcome.self, from: theData!)
DispatchQueue.main.async
self.refreshToken = theData.tokens
.resume()
正如我所说,当使用带有 curl 请求的终端时,响应很好,但使用 URLSession
它失败了,我的文件可以构建,但它在构建后退出并出现错误消息 The given data was not valid JSON
【问题讨论】:
你试过读取theData
转换成UTF8字符串的内容吗?
您不应该在可能失败的情况下使用try!
。您应该更喜欢正确的do try ... catch print(error) // handle error
。这也将为您提供实际的错误描述。
@EmilioPelaez 我不确定要采取什么步骤来做到这一点?
【参考方案1】:
如果json返回Token
,为什么你解码为Welcome
?
尝试解码为Token.self
而且,当您声明时,json 似乎将 expires_in
返回为 Int
:
let expiresIn: String // -> This should be Int
【讨论】:
以上是关于给定的数据不是有效的 JSON的主要内容,如果未能解决你的问题,请参考以下文章
Swift 5:给定的数据不是有效的JSON(将数据从API加载到表格视图)
在 android 中收到的 FCM 数据有效负载不是 json 格式
angular 1 promise call http 有效,但不适用于来自 json 结构的假数据,promise.then 不是函数