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

如何使用JSON框架和Objective-C / iPhone / Xcode解析嵌套的JSON对象?

郭易安
2023-03-14
问题内容

我正在使用JSON框架编写iPhone本机应用程序。

我的应用程序正在使用JSON访问Web服务。我们发送的JSON数据具有嵌套对象,下面是提供的数据示例:

{
    "model": {
        "JSONRESPONSE": {
            "authenticationFlag": true,
            "sessionId": "3C4AA754D77BFBE33E0D66EBE306B8CA",
            "statusMessage": "Successful Login.",
            "locId": 1,
            "userName": "Joe Schmoe"
        }
    }
}

我在使用objectForKey和valueForKey
NSDictionary方法进行解析时遇到问题。我不断收到invalidArgumentException运行时错误。

例如,我想在响应数据中查询“ authenticationFlag”元素。

谢谢,Mike Seattle


问题答案:

没有更多细节很难说(例如,您正在使用的JSON解析代码),但是有两点让我印象深刻:

  1. 您查询的不是完整路径。在上述情况下,您需要首先获取封装模型,json响应,然后才向json响应字典询问authenticationFlag值:

[[[jsonDict objectForKey:@"model"] objectForKey:@"JSONRESPONSE"] objectForKey:@"authenticationFlag"]

  1. 也许您使用的是c字符串("")而不是NSStrings(@"")作为键(尽管这可能会崩溃,甚至无法编译)。密钥应该是可以转换为id的东西。

尽管可能,两者都可能是错误的,所以请提供更多详细信息。



 类似资料:
  • 问题内容: 据我所知,Objective-C,JSON Framework,YAJL和Touch JSON 有三个JSON解析器。然后,这三个将具有自己的特征。 例如: YAJL可以用作SAX样式解析器。 JSON框架的历史比较悠久,已被广泛使用。 触摸JSON解析NSData而不是NSString。 另外,据我测试,性能比较的结果如下: [快速] YAJL > JSON框架>触摸JSON [慢]

  • 问题内容: 我们的团队决定使用Retrofit 2.0, 并且我正在对该库进行一些初步研究。如标题中所述,我想通过Android应用中的Retrofit 2.0解析一些嵌套的JSON对象。 例如,这是一个嵌套的JSON对象,其格式为: 我对数组内的JSON对象感兴趣。我注意到有一些关于通过Retrofit 1.X解析嵌套JSON对象的文章,但是最新的Retrofit 2.0API发生了很大变化,这

  • 问题内容: 我已经完成了有关iOS中JSON的Raywenderlich教程,但是我很难将其调整为适合自己的JSON文件。这是 我的JSON : 这是 我的代码 : 日志返回。 问题答案: 你这样做是不对的。您已正确将JSON数据填充到字典(名为)中。但你有一个(被称为你的主要内部)和价值的是内部数组。 正确的代码是: 了解概念。这取决于你的内心里有什么。如果它是一个数组(在Values内部),则

  • 问题内容: 我正在尝试从上述JSON检索邮政编码。我正在用gson解析它。我是JSON的新手,从我在这里的所有文章中读到的内容(有些与此类似),我都知道字段名称应保持原样。所以我知道我必须做出4类,即响应,视图,结果和地址。我使它们成为静态嵌套类,但是我只得到空值作为输出。在下一个JSON中,我有多个地址。但是我只停留在这个单一的回应上。 举一个简短的例子,我尝试使用此代码检索Timestamp,

  • 我想做的是使用Gson将嵌套的json数据解析为Java对象,并使用自定义的toString()将其打印出来。 Json内容 POJO类:示例 POJO类:JsonFormatter 我的POJO还有其他类,我试图将其解析为Gson的方式是: 但是当我试图打印出它的子值时,比如 我得到了错误: 我想实现的是将上面的json内容打印成这样: 谁能帮我解决这个问题吗?提前谢谢!

  • 编写我自己的JSON转换器工厂,它扩展converter.factory. 以字符串类型返回原始响应,并自己解析。但是根据我最初的研究,从改型2.0中得到原始的响应并不容易。Retrofit 2.0似乎坚持在将响应传递给我之前将其转换为某个内容,而且Retrofit没有提供自己的。(我可能错了~) Update:我们实际上可以通过将设置为HTTP API接口的pojo,并使用Retrofit提供的