gpt4 book ai didi

swift - 将文本文件的内容作为 JSON 传递给 httpBody

转载 作者:行者123 更新时间:2023-11-30 10:32:34 26 4
gpt4 key购买 nike

弄清楚了,见下文:

我正在尝试创建一个程序,可以将文本文件的内容快速传递给 http POST 请求。我正在存储在文本文件中运行的 API 查询的过滤器,并希望将它们作为 JSON 对象(?我认为,无论如何)传递到请求中的 request.httpBody 。我在将 txt 文件转换为 httpBody 可以接受的数据(json 对象?)时遇到问题。

这里是一个 txt 文件示例。同一数组中的过滤器使用 OR 逻辑进行组合。过滤器数组使用 AND 逻辑进行组合,因此我必须考虑这两种情况。:

zero_RC.txt

{
"query": "Zero Response Code",
"filters": [
{
"filters": [
{
"field": "inventoryState",
"value": "CONFIRMED",
"type": "IN"
},
{
"field": "responseCode",
"value": "0",
"type": "EQ"
},
{
"field": "exception",
"value": "DNS lookup failed",
"type": "EQ"
}]
}]
}

这是我想要开始工作的 block 。我相信我需要一个 JSON 对象,并且可以在下面的请求中将其传递给 httpBody。但是,在这方面我还是个初学者。

    // get JSON, somehow
let file = Bundle.main.path(forResource: "zero_RC", ofType: "txt")
let jsonData = file!.data(using: .utf8)

let JSON = try! JSONSerialization.data(withJSONObject: jsonData as Any, options: [])

if JSONSerialization.isValidJSONObject(JSON) {
print("Oh Yeah")
} else {
print("Nah bud, that ain't working")
}


// make the request
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Accept")
request.addValue("Basic \(loginData!)", forHTTPHeaderField: "Authorization")
request.httpBody = JSON

那么我是否要获取一个字符串并转换为数据,然后转换为 JSON 对象?我对如何最好地做到这一点感到非常困惑。我搜索了又搜索,发现的只是解析文章,这并没有多大帮助。

提前致谢。

<小时/>

已回答:

问题出在 request.setValue 中。我需要使用 Content-Type 而不是 Accept

    // get JSON
let path = Bundle.main.path(forResource: "zero_RC", ofType: "txt")
let data = try! Data(contentsOf: URL(fileURLWithPath: path!), options: .mappedIfSafe)


// make the request
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("Basic \(loginData!)", forHTTPHeaderField: "Authorization")
request.httpBody = data

最佳答案

这是解决方案,首先我们将您的 json 文件解码为数据模型,然后将该数据模型对象编码到 httpBody。

let path = Bundle.main.path(forResource: "zero_RC", ofType: "txt")
let data = try! Data(contentsOf: URL(fileURLWithPath: path), options: .mappedIfSafe)
let jsonDecoder = JSONDecoder()
let json = try! jsonDecoder.decode(JsonObjModel.self, from: data)

// now encoding that jsonData to the http body
let encoder = JSONEncoder()
urlRequest.httpBody = try! encoder.encode(json)

“JsonObjModel”如下

// MARK: - JSONObjModel
struct JSONObjModel: Codable {
let query: String
let filters: [JSONObjModelFilter]
}

// MARK: - JSONObjModelFilter
struct JSONObjModelFilter: Codable {
let filters: [FilterFilter]
}

// MARK: - FilterFilter
struct FilterFilter: Codable {
let field, value, type: String
}

关于swift - 将文本文件的内容作为 JSON 传递给 httpBody,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58829776/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com