Swift JSON 解析问题 - 结构可能存在问题?

Swift JSON Parsing issue - Possible problem with struct?

提问人:Patrick Zeigler 提问时间:8/29/2022 更新时间:8/29/2022 访问量:67

问:

登录和验证后,用户将被发送到主应用程序页面。我有以下代码集。

import SwiftUI

typealias MyDefendant = [Defendant]
struct ContentView: View {
    var email: String
    @State var myDefendant: MyDefendant = []

    func getUserData(completion:@escaping (MyDefendant)->()) {
        
        var urlRequest = URLRequest(url: URL(string: "https://milanobailbonds.com/getDefendant.php")!)
        urlRequest.httpMethod = "post"
        
        let authData = [
            "defEmail" : email
            
            ] as [String : Any]
        
        do {
            let authBody = try JSONSerialization.data(withJSONObject: authData, options: .prettyPrinted)
            
            urlRequest.httpBody = authBody
            urlRequest.addValue("application/json", forHTTPHeaderField: "content-type")
           
        } catch let error {
            debugPrint(error.localizedDescription)
        }
        
        URLSession.shared.dataTask(with: urlRequest) { (data, response, error) in
            if let error = error {
                print(error.localizedDescription)
                return
            }
            guard let data = data else {
                return
            }
            do {
            let responseString = String(data: data, encoding: .utf8)!
                print(responseString)
            var returnValue: MyDefendant?
            let decoder = JSONDecoder()
                
            returnValue = try decoder.decode([Defendant].self, from: data)
            completion(returnValue!)
            }
            catch { fatalError("Couldn't Parse")
                
            }
        }.resume()
    return
        
        
        
    }
    
    
    
    var body: some View {
        
        NavigationView {
        
            VStack {
               
            Text(email)
            Text("I Need Bail")
                .font(.largeTitle)
                .fontWeight(.semibold)
         
        Button {
            print("Test")
        } label: {
            Label("I Need Bail", systemImage: "iphone.homebutton.radiowaves.left.and.right")
            .labelStyle(IconOnlyLabelStyle())
            .font(.system(size: 142.0))
            
            
        }

        }    .foregroundColor(.green)
            .shadow(color: .black, radius: 2, x: 2, y: 2)
            .navigationBarTitle("Home")
            .navigationBarTitleDisplayMode(.inline)
               .navigationBarItems(leading:
                Button {
                  print("Test")
               } label: {
                   Label("I Need Bail", systemImage: "line.3.horizontal")
                   .labelStyle(IconOnlyLabelStyle())
                   
                   
               })

        }.onAppear() {
            getUserData() { myDefendant in
                self.myDefendant = myDefendant
                
            }
        }
        
                
          
            
        }
    }

在我的数据模型中,我为被告创建了一个结构,如下所示:

struct Defendant: Codable, Hashable, Identifiable {
    var id: Int
    var defImage: String
    var defName: String
    var defAddress: String
    var defCity: String
    var defState: String
    var defZip: String
    var defPhone: String
    var defEmail: String
    var defUserName: String
    var defPW: String
    var defDOB: String
    var defPriorFTA: Int
    var defFTAExplained: String
    var defAssignedAgency: Int
    
} // Defendant Model

PHP 工作正常,并返回有效的 JSON 以及结构所需的所有项目。

"\"[\\n    {\\n        \\\"Id\\\": 5,\\n        \\\"defImage\\\": \\\"\\\",\\n        \\\"defName\\\": \\\"Some Dude\\\",\\n        \\\"defAddress\\\": \\\"123 Main St\\\",\\n        \\\"defCity\\\": \\\"Some City\\\",\\n        \\\"defState\\\": \\\"FL\\\",\\n        \\\"defZip\\\": \\\"12345\\\",\\n        \\\"defPhone\\\": \\\"888-888-8888\\\",\\n        \\\"defEmail\\\": \\\"[email protected]\\\",\\n        \\\"defUserName\\\": \\\"\\\",\\n        \\\"defPW\\\": \\\"91492cffa4032765f6b025ec6b2c873e49fe5e58\\\",\\n        \\\"defDOB\\\": \\\"01\\\\\\/01\\\\\\/1955\\\",\\n        \\\"defPriorFTA\\\": 0,\\n        \\\"defFTAExplained\\\": \\\"\\\",\\n        \\\"defAssignedAgency\\\": 0\\n    }\\n]\""   

不幸的是,我一直收到错误“无法解析”。

我是 Swift 的新手,一般是编码。 任何想法或想法都非常感谢。

谢谢

iOS JSON Swift 解析 SwiftUI

评论

0赞 Larme 8/29/2022
而不是 , do , 并给出该打印的输出...但据我所知,您已经 JSON 字符串化了。即您的 JSON 以双引号开头,而不是 .fatalError("Couldn't Parse")print("Error: \(error)"); fatalError("Couldn't Parse")[
0赞 Patrick Zeigler 8/29/2022
我很欣赏你的评论。你在这两件事上都是正确的。看到实际的错误是非常有帮助的。此外,发送原始数据 JSON 会提供更整洁且最终可用的结构。谢谢!

答:

1赞 TienTranMinh 8/29/2022 #1

我不确定,但您可以尝试在结构中更改为。请记住,struct 属性的名称必须与 Json 响应中的键完全相同。idId

评论

0赞 Patrick Zeigler 8/29/2022
我敢打赌就是这样。愚蠢的错误。谢谢!
0赞 TienTranMinh 8/29/2022
不客气,我犯这个错误太:)