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

我试图从json文件中去掉不需要的斜杠。我不能简单地替换\的所有实例,而是需要用just来转义\的实例

e、 g.我的json字符串如下所示:

[{
    "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 is
JSONSerializer.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=What
JSONSerializer的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!字符串