我试图从json文件中删除不需要的斜杠。我不能简单地替换\的所有实例,而是我需要转义\"的实例。只是"
e.g。我的json字符串看起来像这样:
let jsonStringTrimmed = jsonString.replacingOccurrences(of: "\"", with: """)
我无法弄清楚查找和替换的语法:
let jsonStr = try String(contentsOf: path, encoding: String.Encoding.utf8)
let jsonStringTrimmed = jsonStr.replacingOccurrences(of: "\", with: """)
let json = try JSONSerializer.toDictionary(jsonStringTrimmed)
另一个可能的缺陷是param d是base64编码的字符串,所以我需要能够避免替换\"在该键的值内
目标是能够使用jsonStringTrimmed,如下所示:
do {
let jsonStr = try String(contentsOf: path, encoding: String.Encoding.utf8)
let json = try JSONSerializer.toDictionary(jsonStr)
}
catch {
print("Error reading file : \(error)")
}
更新:
我最初尝试过:
if let jsonData = try? Data(contentsOf: path){
if let array = (try? JSONSerialization.jsonObject(with: jsonData, options: [])) as? [[String: Any]] {
for i in array{
print(array[i]?["data"] as! String)
let dataJsonStr = array[i]?["data"] as! String
if let dataDict = try? JSONSerializer.toDictionary(dataJsonStr){
print("a : \(dataDict["a"] as! String)")
}
}
}
else{
print("in the else of if let array")
}
}
else{
print("in the else of if let jsonData")
}
我进入捕获并收到错误jsonIsNotDictinary
更新2:尝试使用NivraD的方法循环数组:
OPTIONS
但这给了我错误: 无法下标类型为[[String:Any]]的值,其索引类型为Dictionary指向: print(employeeArray [i]?[" data"] as!String)
答案 0 :(得分:2)
您的字符串是import functools
tab = ["STAR 13","STAR 13, 23","STAR 1, 2 and 3 and STAR 1"]
digit=functools.reduce(lambda x,y: x+re.findall("\d+",y),filter(lambda x: re.match("^STAR ",x),tab),[])
数组,因此只需将其转换为JSON
,无需替换任何内容。首先从Array
获取Data
,然后将此jsonString
与data
一起使用,以获取JSONSerialization
。
Array