首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Alamofire + Gloss:嵌套JSON数组不起作用

Alamofire + Gloss:嵌套JSON数组不起作用
EN

Stack Overflow用户
提问于 2018-05-05 19:19:55
回答 2查看 236关注 0票数 0

我正在尝试将以下JSON发布到api。以下是来自Xcode控制台的日志。

代码语言:javascript
复制
{
    address = (
        {
            city = 1;
            area = 1;
            "building_name" = "building";
        }
    );
    category = 1;
    inspection = 0;
    subCategory = (
        12
    );
}

所以这里的地址字段是嵌套的JSON对象的数组。问题是地址字段在服务器端不能正确使用。我认为它认为包括城市、地区等在内的子字段作为单独的字典而不是作为一个整体的字典。以下是来自Laravel的日志。

代码语言:javascript
复制
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。

EN

回答 2

Stack Overflow用户

发布于 2018-05-05 20:40:19

无论您打印出什么,它肯定不是JSON。尝试向Alamofire方法提供Codable对象,这可能如下所示(在游乐场中):

代码语言:javascript
复制
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:

代码语言:javascript
复制
{
    "inspection" : 0,
    "subCategory" : [
    12
    ],
    "category" : 1,
    "address" : {
        "building_name" : "building",
        "city" : 1,
        "area" : 1
    }
}

大致与您上面提供的内容一致。不确定subCategory应该是什么,所以我猜了一下。这种方法的美妙之处在于,通过JSONDecoder为您提供了一个免费的JSON解析器,这真的很棒。试着从这里开始构建(或者告诉我们你的输出应该代表什么)。

票数 0
EN

Stack Overflow用户

发布于 2018-06-06 22:42:55

这是因为我使用的是URLEncoding,所以服务器端无法正确解析参数。切换到JSONEncoding,它工作得很好。

所以请使用

代码语言:javascript
复制
JSONEncoding.default.encode(urlRequest, with: params)

而不是

代码语言:javascript
复制
URLEncoding.queryString.encode(urlRequest, with: params)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50188835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档