You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否跳过JSON对象表中始终返回nil的首个属性?

解决首个属性返回nil的问题:跳过它就行!

没问题,要跳过那个总是返回nil的首个属性其实很简单,咱们直接从属性数组的第二个元素开始处理就好。先看看怎么调整你的代码,顺便也给你提个更稳妥的JSON生成方案~

一、修改现有代码:跳过首个属性

你原来的代码是遍历整个properties数组,现在只需要跳过第一个元素。在Swift里可以用dropFirst()方法直接跳过数组的第一个元素,修改后的关键部分如下:

// 原来的遍历:for property in properties
// 修改后:跳过第一个属性
for property in properties.dropFirst() {
    let filteredTable = table.value(forKey: property) as! [Any]
    insideStr += "\"\(property)\": \"\(filteredTable[i - 2])\","
}

这样就完全不会处理那个返回nil的首个属性了。另外提个小问题:你手动拼接JSON的时候要注意逗号的处理,最后一个键值对后面的逗号容易导致JSON格式错误,你原来的代码里虽然做了截断,但其实可以用更灵活的方式,比如先把每个键值对存到数组里,再用joined(separator: ",")拼接,这样就不用手动处理逗号了:

// 替换原来的insideStr拼接逻辑
var keyValuePairs = [String]()
for property in properties.dropFirst() {
    let filteredTable = table.value(forKey: property) as! [Any]
    // 注意:如果filteredTable[i-2]包含双引号,手动拼接会出问题,后面会说更安全的方法
    keyValuePairs.append("\"\(property)\": \"\(filteredTable[i - 2])\"")
}
let insideStr = keyValuePairs.joined(separator: ",")

二、更稳妥的方案:用系统API生成JSON

手动拼接JSON很容易出错(比如字符串里有特殊字符、类型转换问题),Swift自带的JSONSerialization会更可靠。给你写个用JSONSerialization的版本,同样跳过首个属性:

func convertToJSON(table: NSArray, properties: [String]) throws -> String {
    var jsonArray = [[String: Any]]()
    
    for i in 0..<table.count {
        var itemDict = [String: Any]()
        // 跳过首个属性,从第二个开始
        for property in properties.dropFirst() {
            guard let value = table[i].value(forKey: property) else {
                // 如果某个属性值为nil,可以选择跳过或者设为NSNull
                continue
            }
            itemDict[property] = value
        }
        jsonArray.append(itemDict)
    }
    
    let jsonData = try JSONSerialization.data(withJSONObject: jsonArray)
    guard let jsonString = String(data: jsonData, encoding: .utf8) else {
        throw NSError(domain: "JSONError", code: 0, userInfo: [NSLocalizedDescriptionKey: "Failed to convert data to string"])
    }
    return jsonString
}

这个方法会自动处理JSON格式的所有细节,比如特殊字符转义、逗号分隔,而且类型转换更安全,不容易出现格式错误。

最后再提醒一下

你原来的代码里filteredTable[i - 2]看起来有点奇怪,要确保索引不会越界哦——比如当i=0的时候,i-2会是-2,这会直接崩溃的,一定要注意数组索引的合法性~

内容的提问来源于stack exchange,提问作者moliere1226

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:09:54