【问题标题】:Parsing JSON from PHP in Swift 4在 Swift 4 中从 PHP 解析 JSON
【发布时间】:2019-01-21 19:49:48
【问题描述】:

使用 Swift 4 从 PHP 输出页面加载 JSON 时出现错误。

注意:PHP 脚本已经过检查并且工作正常

let myUrl = URL(string: "http://localhost/swift/signin_up/login.php");
var request = URLRequest(url:myUrl!)
request.httpMethod = "POST"// Compose a query string
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
DispatchQueue.main.async {
    let task = URLSession.shared.dataTask(with: request) { (data: Data?, response: URLResponse?, error: Error?) in
        if error != nil {
            print("error=\(error!)")
            return
        }

        // You can print out response object
        print("response = \(response!)")
        print("==================================")
        //Let's convert response sent from a server side script to a NSDictionary object:
        do {
            let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary

            if let parseJSON = json {
                print(parseJSON)
            }
        } catch {
            print(" error:\(error)")
        }
    }
    task.resume()

我从 Xcode 收到此错误消息:

错误:错误域 = NSCocoaErrorDomain 代码 = 3840“JSON 文本没有以数组或对象开头,并且允许未设置片段的选项。” UserInfo={NSDebugDescription=JSON 文本没有以数组或对象开头,并且允许未设置片段的选项。}

当我将选项更改为:

options: [.mutableContainers, .allowFragments]

我收到此错误消息:

错误:错误域 = NSCocoaErrorDomain 代码 = 3840“垃圾结束。” UserInfo={NSDebugDescription=垃圾结束。}

这是我测试的 PHP 输出:

{"id":"1","email":"aa","password":"aa"}

【问题讨论】:

  • 当你遇到一些错误时,请至少包含错误信息。
  • 您可以编辑自己的问题。
  • 我猜你的php服务器返回了某种错误,如果你把print(String(data: data!, encoding: .utf8))放在let json = ...之前会得到什么?
  • 我用上面的代码替换并得到消息错误{error:Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo={NSDebugDescription=字符 0 周围的值无效。} @OOPer
  • print(String(data: data!, encoding: .utf8)) 永远不会输出这样的消息,我也从未建议过任何形式的替换。你在看我的评论吗?

标签: php ios json swift


【解决方案1】:

在数据库服务器中设置 character_set 时要小心选择 (utf8_unicode_ci) 使用时获取正确的 json 格式

json_encode(//json variable);

在php中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    • 2018-10-21
    相关资源
    最近更新 更多