如何纠正ios中的字符串格式错误
这是我实际的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 error 3840.)”(JSON文本不是以数组或对象开头,而是选项允许未设置片段。)UserInfo = 0x7fe0faa73210 {NSDebugDescription = JSON text没有从数组或对象和选项开始,以允许片段未设置。}
在转换为字典。
可能是什么错误。如何纠正?请在此方面提供指导。谢谢你的帮助。 在静态做它可以工作,但动态创建它显示错误? 怎么纠正呢?
你错过了activity
字典后的。 我格式化了’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" } ] } }
您需要在结束时检查有许多网站和附加组件。 建议的一个是https://jsonformatter.curiousconcept.com/
Chrome扩展程序是:JSON编辑器