【发布时间】:2016-01-18 07:03:56
【问题描述】:
这是我的实际 json 响应:
{
"x": {
"user": {
"id": 1,
"name": "a"
},
"startday": "2016-01-10",
"status": "New",
"total": 1,
"time_entries": [
{
"id": 766,
"project": {
"id": 3,
"name": "b"
},
"issue": {
"id": 4
},
"user": {
"id": 1,
"name": "c"
},
"activity": {
"id": 8,
"name": "d"
}
"hours": 1,
"comments": "",
"spent_on": "2016-01-10"
}
]
}
}
我动态创建了这个响应,如下所示:
NSString * newstring = [NSString stringWithFormat:@"{\\\"wk_time\\\":\%@\{\\\"user\\\":\%@\{\\\"id\\\":\%@\,\\\"name\\\":\\\"%@\\\"\%@\,\\\"startday\\\":\\\"%@\\\",\\\"status\\\":\\\"%@\\\",\\\"total\\\":\%@\,\\\"time_entries\\\":[{\\\"id\\\":766,\\\"project\\\":\%@\{\\\"id\\\":\%@\,\\\"name\\\":\\\"%@\\\"\%@\,\\\"issue\\\":\%@\{\\\"id\\\":\%@\%@\,\\\"user\\\":\%@\{\\\"id\\\":\%@\,\\\"name\\\":\\\"%@\\\"\%@\,\\\"activity\\\":\%@\{\\\"id\\\":\%@\,\\\"name\\\":\\\"%@\\\"\%@\,\\\"hours\\\":\%@\,\\\"comments\\\":\%@\,\\\"spent_on\\\":\\\"%@\\\"\%@\}",,,...];
然后,按照规定的格式进行:
NSString * newstring1 = [NSString stringWithFormat:@“\"@%@\"",newstring];
NSLog(@"%@",newstring1);
所以,响应是:
@"{\"x\":{\"user\":{\"id\":1,\"name\":\"b\"},\"startday\":\"2016-01-10\",\"status\":\"New\",\"total\":1.0,\"time_entries\":[{\"id\":766,\"project\":{\"id\":3,\"name\":\"a\"},\"issue\":{\"id\":4},\"user\":{\"id\":1,\"name\":\"b\"},\"activity\":{\"id\":8,\"name\":\"c\"},\"hours\":1.0,\"comments\":\"\",\"spent_on\":\"2016-01-10\"}]}}”
如果我像这样静态发布此响应:
NSString * jsoncode =@"{\"x\":{\"user\":{\"id\":1,\"name\":\"b\"},\"startday\":\"2016-01-10\",\"status\":\"New\",\"total\":1.0,\"time_entries\":[{\"id\":766,\"project\":{\"id\":3,\"name\":\"a\"},\"issue\":{\"id\":4},\"user\":{\"id\":1,\"name\":\"b\"},\"activity\":{\"id\":8,\"name\":\"c\"},\"hours\":1.0,\"comments\":\"\",\"spent_on\":\"2016-01-10\"}]}}";
NSData *objectData = [jsoncode dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *jsonData = [NSJSONSerialization JSONObjectWithData:objectData options:NSJSONReadingMutableContainers error:&jsonError];
它被序列化了。显示值。在这种情况下。但是像这样动态创建:
NSString * newstring = [NSString stringWithFormat:@"{\\\"wk_time\\\":\%@\{\\\"user\\\":\%@\{\\\"id\\\":\%@\,\\\"name\\\":\\\"%@\\\"\%@\,\\\"startday\\\":\\\"%@\\\",\\\"status\\\":\\\"%@\\\",\\\"total\\\":\%@\,\\\"time_entries\\\":[{\\\"id\\\":766,\\\"project\\\":\%@\{\\\"id\\\":\%@\,\\\"name\\\":\\\"%@\\\"\%@\,\\\"issue\\\":\%@\{\\\"id\\\":\%@\%@\,\\\"user\\\":\%@\{\\\"id\\\":\%@\,\\\"name\\\":\\\"%@\\\"\%@\,\\\"activity\\\":\%@\{\\\"id\\\":\%@\,\\\"name\\\":\\\"%@\\\"\%@\,\\\"hours\\\":\%@\,\\\"comments\\\":\%@\,\\\"spent_on\\\":\\\"%@\\\"\%@\}",,,...];
NSString * newstring1 = [NSString stringWithFormat:@"@\"%@\"",newstring];
NSError *error=nil;
NSData * objectData = [newstring1 dataUsingEncoding:NSUTF8StringEncoding];
日志显示数据值。 但是在这一步之后,
NSDictionary * json= [NSJSONSerialization JSONObjectWithData:objectData options:0 error:&error];
序列化后显示空值。
NSLog(@"%@",error);
在错误消息中显示此内容。
Error Domain=NSCocoaErrorDomain Code=3840 "无法执行该操作 完全的。 (Cocoa 错误 3840。)”(JSON 文本不是以数组开头或 允许未设置片段的对象和选项。) UserInfo=0x7fe0faa73210 {NSDebugDescription=JSON 文本不是以数组或对象开头并且 允许未设置片段的选项。}
关于转换成字典。
可能是什么错误。如何纠正它?请在这方面需要指导。提前感谢您的帮助。在做静态它工作,但动态创建它显示错误?如何纠正?
【问题讨论】:
-
建议在解析前检查jsonlint.com中的子字符串。您可能会知道哪里出了问题。