Json 替换\“的实例;加上;
我试图从json文件中去掉不需要的斜杠。我不能简单地替换\的所有实例,而是需要用just来转义\的实例 e、 g.我的json字符串如下所示:Json 替换\“的实例;加上;,json,swift,string,replace,escaping,Json,Swift,String,Replace,Escaping,我试图从json文件中去掉不需要的斜杠。我不能简单地替换\的所有实例,而是需要用just来转义\的实例 e、 g.我的json字符串如下所示: [{ "type": "test", "action": "test", "filename": 1, "data": "{\"a\":1,\"b\":10000,\"c\":0,\"d\":\"\"}" }, { "type": "test2", "action": "test2", "filen
[{
"type": "test",
"action": "test",
"filename": 1,
"data": "{\"a\":1,\"b\":10000,\"c\":0,\"d\":\"\"}"
}, {
"type": "test2",
"action": "test2",
"filename": 2,
"data": "{\"a\":2,\"b\":10000,\"c\":15,\"d\":\"\"}"
}]
我无法理解查找和替换的语法:
let jsonStringTrimmed = jsonString.replacingOccurrences(of: "\"", with: """)
另一个可能的陷阱是param d是base64编码的字符串,因此我需要能够避免在该键的值中替换\”
目标是能够使用jsonStringTrimmed,如下所示:
let jsonStr = try String(contentsOf: path, encoding: String.Encoding.utf8)
let jsonStringTrimmed = jsonStr.replacingOccurrences(of: "\", with: """)
let json = try JSONSerializer.toDictionary(jsonStringTrimmed)
更新:
我最初试过:
do {
let jsonStr = try String(contentsOf: path, encoding: String.Encoding.utf8)
let json = try JSONSerializer.toDictionary(jsonStr)
}
catch {
print("Error reading file : \(error)")
}
我正进入捕捉,并收到错误JSONITNOTINCINAL
更新2:在采用NivraD的方法后尝试通过阵列循环:
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")
}
但这给了我一个错误:
无法为类型为[[String:Any]]且索引类型为Dictionary的值下标指向:
打印(employeeArray[i]?[“data”]as!String)您的字符串是
JSON
Array,因此只需将其转换为Array
即可,无需替换任何内容。因此,首先从jsonString
获取数据,然后使用数据和JSONSerialization
从中获取Array
if let jsonData = try? Data(contentsOf: URL(fileURLWithPath: path))
if let array = (try? JSONSerialization.jsonObject(with: jsonData, options: [])) as? [[String: Any]] {
print(array.first?["a"])
}
}
您的字符串是JSON
Array,因此只需将其转换为Array
即可,无需替换任何内容。因此,首先从jsonString
中获取数据
,然后将此数据
与JSONSerialization
一起使用即可从中获取数组
if let jsonData = try? Data(contentsOf: URL(fileURLWithPath: path))
if let array = (try? JSONSerialization.jsonObject(with: jsonData, options: [])) as? [[String: Any]] {
print(array.first?["a"])
}
}
你想要a、b、c和d的值,对吗?@NiravD我需要替换,这样我就可以将字符串转换为json对象,以便使用JSONSerializertry使用进行处理。replacingOccurrences(of:“\\\”,with:“\”)
因为字符串中的``用于转义下一个character@milo526贴子作为答案?这不是一个快速的问题,而是一个关于regexp的问题…提示:永远不要手动处理JSON字符串。这是永远不需要的。如果你发现自己需要这样做,这实际上意味着你有另一个问题。相反,始终使用正确的序列化/反序列化方法,如Nirav的回答中所述,你会没事的。你想要a、b、c和d的值,对吗?@NiravD我需要替换,以便我可以使用将字符串转换为json对象,以便使用JSONSerializertry进行处理。replacingOccurrences(of:“\\\”,with:“\”)
因为字符串中的``用于转义下一个character@milo526贴子作为答案?这不是一个快速的问题,而是一个关于regexp的问题…提示:永远不要手动处理JSON字符串。这是永远不需要的。如果你发现自己需要这样做,这实际上意味着你有另一个问题。相反,始终使用正确的序列化/反序列化方法,如Nirav的回答中所述,你会没事的。当尝试你的方法而不是使用JSONSerializer库时,我仍然会进入if-let dic=What isJSONSerializer.toDictionary
和jsonStr
包含“{\'a\':1,\'b\':10000,\'c\':0,\'d\':\”}“
,对吗?jsonStr是发布在my q中的整个json,而不仅仅是数据键。。。JSONSerializer在以下位置可用:。我需要能够访问json中的所有键,而不仅仅是数据中的键key@user2363025因为data
键包含jsonString,所以您需要获取该字符串,然后将其转换为数据,然后将数据转换为字典[String:Any]
@user2363025将该行更改为让dataJsonStr=i[“data”]as!String
。当我尝试你的方式而不是使用JSONSerializer lib时,我仍然会使用if-let dic=WhatJSONSerializer的else。toDictionary
和jsonStr
包含“{\'a\\':1,\'b\':10000,\'c\':0,\'d\':\'}”
,对吗?jsonStr是我q中发布的整个json,而不仅仅是数据键。。。JSONSerializer在以下位置可用:。我需要能够访问json中的所有键,而不仅仅是数据中的键key@user2363025因为data
键包含jsonString,所以您需要获取该字符串,然后将其转换为数据,然后将数据转换为字典[String:Any]
@user2363025将该行更改为让dataJsonStr=i[“data”]as!字符串
。