我正在使用AFNetworking使用基本身份验证来调用Web服务。问题是我得到了
$ docker inspect --format='{{json .GraphDriver.Data.MergedDir}}' container-id
"/var/lib/docker/overlay2/the-string-you-are-searching-for/merged"
当我允许碎片时,我得到
FAILURE: Error Domain=NSCocoaErrorDomain Code=3840 "JSON text did not start with array or object and option to allow fragments not set." UserInfo={NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.}
我与我们的Web开发人员进行了交谈,无论出于何种原因,他都在JSON响应的前面加上“ //”,因此在使用JSON之前,我需要对其进行修剪。我的问题是我不确定如何访问响应以对其进行修剪和使用,因为代码会立即转到故障块。
Invalid value around character 0
答案 0 :(得分:0)
如果使用responseSerializer
将AFHTTPResponseSerializer
设置为manager.responseSerializer = AFHTTPResponseSerializer()
,则responseObject
应该是(NS)Data
对象。
做什么:
获取"//"
的值(我们叫它prefixData
)。
检查responseObject
是否带有前缀。
如果需要,请删除。
let prefixData = "//".data(using: .utf8)!
//OR let prefixData = Data(bytes: [0x2F, 0x2F])
let responsePrefix = responseObject.subdata(in: Range(0..<2))
if responsePrefix == prefixData {
let jsonData = responseObject.subdata(in: Range(2..<responseObject.count))
//You got your JSON to serialize with Codable or JSONSerialization
}
出于逻辑考虑,使用示例代码强制打开并进行静默尝试(尝试?)(不要这样做):
let prefixData = "//".data(using: .utf8)!
print("prefixData from String: \(prefixData as NSData)")
let prefixData2 = Data(bytes: [0x2F, 0x2F])
print("prefixData from Bytes: \(prefixData2 as NSData)")
if prefixData == prefixData2 {
print("prefixData == prefixData2, use the one you want")
}
let responseObject = "//{\"key\":\"value\"}".data(using: .utf8)!
print("responseObject: \(responseObject as NSData)")
let responsePrefix = responseObject.subdata(in: Range(0..<2))
if responsePrefix == prefixData {
let jsonData = responseObject.subdata(in: Range(2..<responseObject.count))
print("jsonData: \(jsonData as NSData)")
let json = try? JSONSerialization.jsonObject(with: jsonData, options: [])
print("json: \(json!)")
let jsonString = String(data: jsonData, encoding: .utf8)
print("jsonString: \(jsonString!)")
}
输出:
$>来自字符串的prefixData:<2f2f>
$> prefixData来自字节:<2f2f>
$> prefixData == prefixData2,请使用所需的
$> responseObject:<2f2f7b22 6b657922 3a227661 6c756522 7d>
$> jsonData:<7b226b65 79223a22 76616c75 65227d>
$> json:可选({
键=值;
})
$> jsonString:{“键”:“值”}