swift - 在swift 5中将字符串转换为字典?
问题描述
我有一个字符串,其中包含以下格式的 json:
var myString: String = "{key1: val1, key2: val2}"
我怎样才能将其转换为:
var myJson: [String: String] = ["key1": "val1", "key2": "val2"]
由于我的字符串不是 format "{"key1": "val1", "key2": "val2"}"
,我在通过以下代码片段解析它时遇到困难:
func convertToDictionary(text: String) -> [String: Any]? {
if let data = text.data(using: .utf8) {
do {
return try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]
} catch {
print(error.localizedDescription)
}
}
return nil
}
此函数始终为 myString 返回 nil
解决方案
你可能不得不以艰难的方式去做。像这样的东西:
import SwiftUI
@main
struct TestApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
extension String {
func trim() -> String {
return self.trimmingCharacters(in: .whitespacesAndNewlines)
}
}
struct ContentView: View {
var body: some View {
Text("testing")
.onAppear {
let myString: String = "{key1: val1, key2: val2, key3: val3}"
let myJson = transform(myString)
print("----> myJson: \(myJson)")
}
}
func transform(_ myString: String) -> [String : String] {
var result = [String : String]()
if myString.count > 2 { // case of {}
let temp1 = myString.dropFirst().dropLast()
let temp2 = temp1.split(separator: ",").map{String($0)}
for str in temp2 {
let temp3 = str.split(separator: ":").map{String($0)}
let (k,v) = (temp3[0].trim(),temp3[1].trim())
result[k] = v
}
}
return result
}
}
推荐阅读
- c# - 使用 ExecuteScalar() 查询数据库:必须声明表变量“@tableName”
- sql - 如何使用合并语句将临时表中的数据插入到 oracle/sql 中的分区表中
- maven - 如何在执行插件时忽略聚合器 POM 中的模块
- c++ - 在 Z3 C++ 绑定中定义有趣的宏和正则表达式
- spring - Spring RestTemplate 消息转换器读取/使用多部分/混合响应
- python - 为什么我不能使用 Selenium 在 Python 中将_keys 发送到 Twitch 搜索栏?
- php - Yii2 - radioList 选择绑定到两个不同的字段
- http - Flutter http获得完成率?
- angular - 如何检查元素是否是模板Angular中的HTMLElement?
- regex - 使用 Notepad++ 正则表达式将日期格式 2007-10-26T06:36:28 替换为标准 YYYY-MM-DD