当前位置: 首页 > 面试题库 >

如何使用NSJSONSerialization反序列化转义的JSON字符串?

乜昆
2023-03-14
问题内容

我有一个iOS应用程序,需要处理来自Web服务的响应。响应是包含序列化JSON对象的序列化JSON字符串,如下所示:

"{ \"name\" : \"Bob\", \"age\" : 21 }"

请注意,此响应是JSON 字符串 ,而不是JSON对象。我需要做的是将字符串反序列化,这样我就可以得到:

{ "name" : "Bob", "age" : 21 }

然后我可以+[NSJSONSerialization JSONObjectWithData:options:error:]用来反序列化为NSDictionary

但是,我该如何第一步?也就是说,如何“解串”字符串,以便拥有序列化的JSON对象? +[NSJSONSerialization JSONObjectWithData:options:error:]仅当顶级对象是数组或字典时才有效;它不适用于字符串。

我最终编写了自己的JSON字符串解析器,希望它符合RFC
4627的2.5节
。但是我怀疑我已经忽略了使用NSJSONSerialization其他可行方法进行此操作的简单方法。


问题答案:

如果您嵌套了JSON,则只需调用JSONObjectWithData两次:

NSString *string =  @"\"{ \\\"name\\\" : \\\"Bob\\\", \\\"age\\\" : 21 }\"";
// --> the string
// "{ \"name\" : \"Bob\", \"age\" : 21 }"

NSError *error;
NSString *outerJson = [NSJSONSerialization JSONObjectWithData:[string dataUsingEncoding:NSUTF8StringEncoding]
                              options:NSJSONReadingAllowFragments error:&error];
// --> the string
//  { "name" : "Bob", "age" : 21 }
NSDictionary *innerJson = [NSJSONSerialization JSONObjectWithData:[outerJson dataUsingEncoding:NSUTF8StringEncoding]
                              options:0 error:&error];
// --> the dictionary
// { age = 21; name = Bob; }


 类似资料:
  • 问题内容: 我有数据类/表“ User”,其中有“ preferences”列 首选项类型为TEXT,我在其中存储JSON。 所以价值是 如何使用一些注释将其包装起来,以便像 或无需包装到数据对象中 我想可能会有一些Jackson注释可以添加到字段中,例如 我对JPA相当陌生,文档非常丰富。 我相信我的情况很普遍。谁能举任何例子? 问题答案: 老实说,我认为最好的解决方案是为属性创建一个单独的表(

  • 问题内容: 所有,我都有以下输出/字符串(它是JIRA API的响应): 我用于遍历元素并获取值。我在下面的“嵌套对象”示例中编写了类 http://www.javacreed.com/gson-deserialiser- example/ 我能够获得到第二级的元素值。例如:在此级别之前,我能够获得的值以及其他值。我如何获得的价值? 我应该如何构造我的解串器和类。请协助。谢谢。 问题答案: 试试这

  • 有没有一种方法可以正确地反序列化以双引号开头和结尾的JSON字符串? 数据以流的形式输入(来自AWS S3对象)。这是流的内容(注意开头和结尾的双引号字符): JsonSerializer似乎没有正确地反序列化它。但是,对于以下内容,其工作原理与预期一致: 以下是片段:

  • 问题内容: 如何将上述字符串反序列化为java对象。 我正在使用的类是 问题答案: @基达 我假设您可以控制JSON输入字符串的创建方式。我认为JSON字符串格式不正确,无法对地图类型进行默认的GSON反序列化。 我已经修改了输入字符串供您考虑,这将导致非null的LocalLocationId 如果我对输入字符串的假设不正确,请发表评论。 编辑1:由于无法修改输入,请考虑编写自定义解串器。以下是

  • 我的JSON如下所示: 我的课程如下所示: 如何反序列化到映射如和到

  • 我需要编写一个方法,它接受一些对象、给定对象的类中存在的一些字段名和一些字段值。该值是字段的JSON序列化形式。该方法将获取该值并相应地反序列化它,如下所示: (我实际上只需要检索反序列化的值,而不需要重新设置它,但这使它成为一个更好的示例。)只要Jackson默认的反序列化足够,这就行了。现在让我们假设我有一个带有自定义(de)序列化程序的类: 一个可能的解决方案是手动检查注释。但是,我真的不想