如何在ios中纠正此字符串格式错误

Posted

技术标签:

【中文标题】如何在ios中纠正此字符串格式错误【英文标题】:How to rectify this string format error in ios 【发布时间】: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中的子字符串。您可能会知道哪里出了问题。 【参考方案1】:

您错过了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 编辑器

【讨论】:

\"x\":\"user\":\"id\":1,\"name\":\"a\",\"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,\"cmets\":\"\",\"spent_on\":\"2016-01-10\"] 如果我只把它放在静态数据中......它得到序列化并显示值..我没有缺少逗号或其他东西

以上是关于如何在ios中纠正此字符串格式错误的主要内容,如果未能解决你的问题,请参考以下文章

如何纠正 android kotlin 发送格式错误的 JSON

如何使用边界矩形纠正 OCR 分割错误?

如何解决此错误“格式错误的 URL”?

如何纠正流量警告:解构(缺少注释)

如何纠正错误的ESXi共享存储配置

如何通过读取环境对象来纠正此问题? (SwiftUI 并且在没有 SceneDelegate 的情况下工作)