如何解析 JSON 中的数据

How do I parse data from JSON

提问人:Ceri Turner 提问时间:10/28/2023 更新时间:10/28/2023 访问量:47

问:

添加了PHP和Swift标签,因为我不确定问题是否出在哪里。

我将使用以下内容从 swift 中的网页获取信息,但我收到一条无法解码的消息

func loadData() async {
    guard let url = URL(string: "****") else {
        print("Invalid URL")
        return
    }
    do {
        let (data, _) = try await URLSession.shared.data(from: url)
        if let decodedResponse = try? JSONDecoder().decode(Response.self, from: data) {
            print("Load Data 3")
            dims = decodedResponse.dims
        } else {
            print("Unable to decode")
            print(String(data: data, encoding: .utf8) ?? "")
        }
    } catch {
        print("Invalid data")
    }
}

它调用的页面上的 php 代码是

    $sql = "SELECT name,id FROM `DIMs` ORDER BY dimType ASC, released DESC, name ASC LIMIT 2";
    $q = $pdo->prepare($sql);
    $q->execute();
    if($q->errorCode() != 0) {
        $errors = $q->errorInfo();
        echo($errors[2]);
    }
    foreach ($q->fetchAll() as $row) {
        $dims[] = array('id' => $row['id'], 'name' => $row['name']);
    }
    
    echo(json_encode($dims));

在浏览器中查看时,它给了我

[{"id":124,"name":"25th Anniversary"},{"id":126,"name":"Angoramon BE"}]

当打印decodedResponse时,我得到的与在浏览器中查看它相同。

我一直在按照以下链接中的教程进行操作,并尝试根据我的要求进行修改。如果我使用教程中的内容,它可以正常工作

https://www.hackingwithswift.com/books/ios-swiftui/sending-and-receiving-codable-data-with-urlsession-and-swiftui

php json swift

评论

1赞 Larme 10/28/2023
除非您知道如何调试,否则切勿使用(带问号)。请改用 / 并打印错误。回答 分享 什么是 ?但我想这可能会更好,因为你返回一个数组,而不是单个对象。try?docatchResponse[Response].self
0赞 HangarRash 10/28/2023
改成 just .更改为,以便您可以在尝试解码 JSON 时查看错误是什么。try?tryprint("Invalid data")print("Invalid data: \(error)")
0赞 dalton_c 10/28/2023
看看你分享的JSON,我猜你需要使用(“响应”周围的括号).decode([Response].self
0赞 Ceri Turner 10/28/2023
这给了我类型为“[Response]”的值没有成员“dims”
0赞 Álvaro González 10/28/2023
你的后端代码不会发送标头,也不会在错误检查方面表现出色,但如果生成的 JSON 是你所期望的,那么就没有理由责怪 PHP。(您的文本编辑器没有使用 UTF-8 BOM 保存文件,是吗?Content-Type

答: 暂无答案