【问题标题】:Why isn't my php json_encode not serializable with .responseJSON in alamofire?为什么我的 php json_encode 在 alamofire 中不能用 .responseJSON 序列化?
【发布时间】:2019-09-04 07:37:02
【问题描述】:

我在从我的服务器(它是一个 PHP 后端)对我的 iOS 应用程序上的 JSON 响应进行序列化时遇到了一些问题。我的应用程序发送带有适当参数的发布请求,对其进行验证,将结果放入数组中,并将其编码。现在这不是问题,代码工作正常。但是,它是它们之间的联系。看看下面的 PHP 代码。

echo json_encode($array)

现在来到 xcode,我正在使用 alamofire 发送请求,如下面的代码所示

Alamofire.request(URL_USER_REGISTER, method: .post, parameters: parameters).responseString { response in
            print(response)
            }
        }

您可以在 .responseString 中看到它,因为我显然如果使用 .responseJSON 会引发 code=3480 错误,我想从我自己的响应 JSON 中获取特定数据。我尝试了其他在线修复此问题的方法,但他们都选择了 .responseString 选项。

为什么会这样? JSON 类型是否不兼容?这有什么秘密吗?

我只想从我的 JSON 响应中获取特定数据,例如“消息”,而当我得到一个字符串时这是不可能的......感谢任何帮助!

我正在使用 Alamofire 4.3

【问题讨论】:

  • Look at the PHP code below. 此行不打印生成的 json 字符串。
  • @tkausl 对此感到抱歉,请查看编辑后的代码
  • 是的,它没有用,我在尝试阅读时不断收到 3480 错误代码,我想我将不得不欺骗自己从字符串中获取信息
  • 您确定没有收到 3840 错误,这将是无效的 JSON 错误吗?没有错误 3480。如果您以某种方式看到它,您能否发布 localizedDescription。另外,Alamofire 4.3 已经过时了,你至少应该更新到 4.8.2。

标签: php ios json swift alamofire


【解决方案1】:

尝试以下操作,这样 Alamofire 将通过 JSONSerialization 运行响应数据,具体取决于 JSON 响应的类型,您可以使用 json as? [String : Any]json as? [[String : Any]]

Alamofire.request(URL, method: .post, parameters: parameters).responseJSON { response in
    guard response.error == nil, let json = response.result.value else {
        print("Error: \(response.error?.localizedDescription ?? "no content")")
        return
    }

    if let jsonDict = json as? [String : Any] {
        print(jsonDict)
    } else if let jsonArray = json as? [[String : Any]] {
        print(jsonArray)
    }
}

【讨论】:

  • 天哪,确实有效!非常感谢你!我不明白,为什么它不能直接接受 json 对象而不是在本地转换它?也许是一个错误? ://
  • 嗯,我的意思是它是库中的一个小错误,但没关系,你建议的工作:D
  • 这只是在做responseJSON 已经做的事情:获取数据,使用.allowFragments 选项通过JSONSerialization 运行它。应该没有行为差异。你在说什么错误?
【解决方案2】:

您是否尝试过打印 response.value 来检查它是否是有效的 JSON?

【讨论】:

  • 你从哪里得到 code=3480,程序崩溃了还是 Alamofire 出错了?
  • 这是一个 alamofire 错误,我一直在阅读它,显然它是一个错误
  • 响应中的 JSON 有什么特别之处吗?
  • 成功:{ 错误 = 0; message = "用户创建成功"; } 这就是响应,非常基本的
  • 我很确定这不是有效的 JSON。
猜你喜欢
  • 2010-12-26
  • 1970-01-01
  • 2019-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-27
  • 2010-10-23
相关资源
最近更新 更多