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

在Swift中将JSON字符串解析为Dictionary

别担心,刚接触JSON开发的时候遇到这种问题太正常啦!我来帮你搞定把这段OSC传来的JSON转成Dictionary的事儿,顺便说说你可能踩的小坑~

先看你的JSON结构

这段JSON是标准的结构化数据,外层是对象(对应Dictionary),里面的data字段是一个数组,数组里包含单个工作区对象,完全可以正常解析。需要注意的是JSON里的\/是合法的转义字符,解析时会自动转换成/,千万别手动去替换这个转义符,反而会破坏JSON的有效性。

Swift 实现示例

如果你是用Swift开发,直接用系统自带的JSONSerialization就能搞定:

import Foundation

// 你收到的JSON字符串
let jsonString = "{\"status\":\"ok\",\"address\":\"\\/workspaces\",\"data\":[{\"version\":\"4.2.1\",\"displayName\":\"Untitled Workspace\",\"uniqueID\":\"82688E14-5E8F-428E-A781-8ABC920A5515\",\"hasPasscode\":false}]}"

// 第一步:把字符串转成Data
guard let jsonData = jsonString.data(using: .utf8) else {
    print("无法将JSON字符串转为Data,请检查字符串编码")
    return
}

// 第二步:解析为Dictionary
do {
    guard let jsonDict = try JSONSerialization.jsonObject(with: jsonData, options: []) as? [String: Any] else {
        print("JSON结构不符合预期的Dictionary格式")
        return
    }
    
    // 现在就可以自由操作数据啦
    if let status = jsonDict["status"] as? String {
        print("请求状态:\(status)")
    }
    
    // 取出工作区列表里的第一个条目
    if let workspaces = jsonDict["data"] as? [[String: Any]], let firstWorkspace = workspaces.first {
        let workspaceName = firstWorkspace["displayName"] as? String ?? "未命名工作区"
        let workspaceVersion = firstWorkspace["version"] as? String ?? "未知版本"
        print("第一个工作区:\(workspaceName),版本号\(workspaceVersion)")
    }
} catch {
    print("JSON解析出错:\(error.localizedDescription)")
}
Python 实现示例

如果是Python开发,用内置的json模块更简单:

import json

# 你收到的JSON字符串
json_str = '{"status":"ok","address":"\/workspaces","data":[{"version":"4.2.1","displayName":"Untitled Workspace","uniqueID":"82688E14-5E8F-428E-A781-8ABC920A5515","hasPasscode":false}]}'

try:
    # 直接解析为字典
    json_dict = json.loads(json_str)
    
    print(f"请求状态:{json_dict['status']}")
    # 取出第一个工作区信息
    first_workspace = json_dict['data'][0]
    print(f"工作区名称:{first_workspace['displayName']},版本:{first_workspace['version']}")
except Exception as e:
    print(f"解析出错:{str(e)}")
你之前可能出错的原因
  • 类型转换错误:比如你尝试把整个JSON直接转成[String: String],但data字段是数组,不是字符串,类型不匹配就会报错,必须用[String: Any](Swift)或者直接用json.loads自动处理类型(Python)。
  • 手动修改转义字符:如果你手动把\/替换成/,可能会破坏JSON的语法规则,导致解析失败。
  • 字符串编码问题:如果你的JSON字符串包含特殊字符,转成Data时用了错误的编码(比如不是UTF-8),也会导致解析失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:01:29