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

在iOS中使用NSJSONSerialization进行JSON解析

牛智志
2023-03-14
问题内容

我正在解析JSON我的代码。但是在检索已解析的数据时遇到了一些意外的问题JSON。所以,让我解释一下我的问题。

我必须JSON使用xcode 解析以下数据。这是我在浏览器中命中相同URL时要解析的数据的样子:

{
"RESPONSE":[
    {"id":"20",
    "username":"john",
    "email":"abc@gmail.com",
    "phone":"1234567890",
    "location":"31.000,71.000"}],
"STATUS":"OK",
"MESSAGE":"Here will be message"
}

我要获取此JSON数据的代码如下:

NSData *data = [NSData dataWithContentsOfURL:finalurl];
NSError *error;
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];

如果我json使用来打印对象NSLog,即NSLog(@"json: %@", [json description]);它看起来像:

json: {
    MESSAGE = "Here will be message";
    RESPONSE =(
                {
            email = "abc@gmail.com";
            id = 20;
            location = "31.000,71.000";
            phone = 1234567890;
            username = john;
        }
    );
    STATUS = OK;
}

因此,在这里我观察到两件事:

  1. 键(或节点)的序列(MESSAGERESPONSESTATUS)被改变相比上述网络响应为。

  2. RESPONSE被括在'(' & ')'大括号中。

现在,如果我将键MESSAGESTATUSNsLog 它们的值分开,则它们将作为适当的字符串打印出来。

喜欢msgStr:Here will be messageStatus:OK

但是, 如果我将值RESPONSE作为字典分开,然后再像email和一样分开那个字典的子值username,那么
我就不能将它们作为字符串

这是到目前为止我编写的代码:

NSMutableDictionary *response = [json valueForKey:@"RESPONSE"];
NSString *username = [response valueForKey:@"username"];
NSString *emailId = [response valueForKey:@"email"];

如果我打印usernameemailId,则它们 不会被打印为普通字符串 ,而是输出为:

username:(
    john
)

email:(
    abc@gmail.com
)

所以我的问题是为什么它不能像普通字符串一样?如果我尝试进一步使用此变量,则它们会显示括号内的值'(' & ')'。是因为发生这种情况NSJSONSerialization吗?


问题答案:

首先,在您的JSON响应中dictionary,在键“ RESPONSE
”下,您有一个不是的dictionary数组,并且该数组包含dictionary对象。因此要提取 用户名电子邮件ID ,如下所示

NSMutableDictionary *response = [[[json valueForKey:@"RESPONSE"] objectAtIndex:0]mutableCopy];
 NSString *username = [response valueForKey:@"username"];
 NSString *emailId = [response valueForKey:@"email"];


 类似资料:
  • 问题内容: 我想使用Api GSON通过java解析JSON文件以获取JSON文件的最后一个字段: 描述符.json: ListTeleServices.java: TeleService.java: Record.java: 最后是我的解析器类 JSONMainParse.java: 对我来说似乎正确,它应该显示:“ amine1”,但它在以下位置给了我一个 nullPointerExcepti

  • 问题内容: 如何在C#中解码JSON响应? 问题答案: 签出DataContractJsonSerializer。您必须以.NET 3.5为目标,这意味着非常需要Visual Studio 2008。 这是一篇有关使用Json数据协定序列化程序的不错的博客文章。

  • 我有一个JSON文件,我正在尝试解析,如下所示 但我没有得到任何数据。任何人都知道问题出在哪里? 我收到以下错误: 错误域=NSCocoaErrorDomain Code=3840“操作无法完成。(可可错误3840。)”(字符278周围的转义序列无效。)UserInfo = 0xa 47 ff 60 { NSDebugDescription =字符278周围的转义序列无效。}

  • 问题内容: 我想从类型为的JSON解析数据。我正在使用Google Gson。 我有: 我的课是: 问题答案: 这是执行此操作的简单代码,我避免了所有检查,但这是主要思想。 为了使使用更加通用- 您会发现Gson的javadocs非常清楚并且很有帮助。

  • 我正在编写我的第一个Haskell程序,试图解析文件中的“csv”。到目前为止,我已经写了以下内容 我设法解析json或csv,但将这些东西粘在一起是我目前对Haskell的理解(我是一个非常新手)的一种方式。我认为问题是我没有属性实例化DC。从记录中我得到一个错误 |66|parseBook m=EmtecCSV

  • 我使用< code>CommonCrypto来解密从服务器获取的加密MP3文件。实际上,服务器端使用带有CBC模式和< code>PKCS5Padding的AES 128位加密。所以我想用同样的方式解密它。 我使用下面的代码进行解密。 如何在此代码中指定CBC模式和? 预先感谢