我正在尝试将以下JSON发布到api。以下是来自Xcode控制台的日志。
{
address = (
{
city = 1;
area = 1;
"building_name" = "building";
}
);
category = 1;
inspection = 0;
subCategory = (
12
);
}所以这里的地址字段是嵌套的JSON对象的数组。问题是地址字段在服务器端不能正确使用。我认为它认为包括城市、地区等在内的子字段作为单独的字典而不是作为一个整体的字典。以下是来自Laravel的日志。
array (
'address' =>
array (
0 =>
array (
'city' => '1',
),
1 =>
array (
'area' => '1',
),
2 =>
array (
'building_name' => 'building',
),
),
'category' => '1',
'inspection' => '0',
'subCategory' =>
array (
0 => '12',
),
)基本上,我想知道Alamofire是不是试图对它们进行两次jsonify,但却无法避免。我使用的是Alamofire 4.7.2和Glos2.0,服务器端基于Laravel。
发布于 2018-05-05 20:40:19
无论您打印出什么,它肯定不是JSON。尝试向Alamofire方法提供Codable对象,这可能如下所示(在游乐场中):
import Cocoa
struct Address: Codable {
let city: Int
let area: Int
let building_name: String
}
struct Inspection : Codable {
let address: Address
let category: Int
let inspection: Int
let subCategory: [Int]
}
let inspection = Inspection(address: Address(city: 1, area: 1, building_name: "building"), category: 1, inspection: 0, subCategory: [12])
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
do {
let jsonData = try encoder.encode(inspection)
print(String(data: jsonData, encoding: .utf8)!)
} catch {
print(error)
}这将打印出以下JSON:
{
"inspection" : 0,
"subCategory" : [
12
],
"category" : 1,
"address" : {
"building_name" : "building",
"city" : 1,
"area" : 1
}
}大致与您上面提供的内容一致。不确定subCategory应该是什么,所以我猜了一下。这种方法的美妙之处在于,通过JSONDecoder为您提供了一个免费的JSON解析器,这真的很棒。试着从这里开始构建(或者告诉我们你的输出应该代表什么)。
发布于 2018-06-06 22:42:55
这是因为我使用的是URLEncoding,所以服务器端无法正确解析参数。切换到JSONEncoding,它工作得很好。
所以请使用
JSONEncoding.default.encode(urlRequest, with: params)而不是
URLEncoding.queryString.encode(urlRequest, with: params)https://stackoverflow.com/questions/50188835
复制相似问题