【问题标题】:How to convert JSON query?如何转换 JSON 查询?
【发布时间】:2011-08-11 18:54:00
【问题描述】:

这是我得到的 JSON 输出:

{
  "success":true,
  "return":{
    "an":[
      {
        "ordner_id":1,
        "name":"Eingang",
        "gesamt":"1415",
        "ungelesen":"0"
      },
      {
        "ordner_id":3,
        "name":"Gel\u00f6scht"
      },
      {
        "ordner_id":"42864",
        "name":"Test1",
        "gesamt":"0",
        "ungelesen":"0"
      }
    ],
    "von":[
      {
        "ordner_id":2,
        "name":"Gesendet"
      },
      {
        "ordner_id":3,
        "name":"Gel\u00f6scht"
      }
    ]
  }
}

我可以通过以下几行轻松获得“成功”和“返回”值(BOOL 和 NSDictonary):

 NSDictionary *ensFolderListFirstReturn = [ENSHandler GetENSFolderList];
BOOL success = [[ensFolderListFirstReturn objectForKey:@"success"] boolValue];  
if (success)
{
    ensFolderList = [ensFolderListFirstReturn objectForKey:@"return"];
}

但是当我尝试用这个获得“an”值时:

 NSDictionary *ensFolderList1 = [ensFolderList objectForKey:@"an"];

我遇到了一个 BAD EXEC 错误。

我做错了什么?

【问题讨论】:

  • 请记住,您不拥有ensFolderList = [ensFolderListFirstReturn objectForKey:@"return"]; 返回的对象,并且取决于您尝试执行[ensFolderList objectForKey:@"an"]何时ensFolderList 指向的对象可能已经被释放,你现在是一个悬空指针的骄傲拥有者。此外,与键 an 关联的对象是一个数组,而不是字典。

标签: iphone ios xcode json


【解决方案1】:

看起来“an”值包含一个列表,而不是字典。试试:

NSArray *ensFolderList1 = [ensFolderList objectForKey:@"an"];

该数组的每个元素都将保存一个 NSDictionary。

【讨论】:

    【解决方案2】:

    我认为您正在尝试直接从 NSDictionary 获取 NSDictionary 对象。我不认为这是一个好方法。尝试从 NSDictionary 中获取 NSArray 对象,例如:

    NSArray *ensFolderArray = [ensFolderList objectAtIndex:0];

    NSLog(@"%@",ensFolderArray);

    现在尝试在控制台上查看您是否获得了所需的“an”对象并给出您的回应。

    编码愉快!

    【讨论】:

      猜你喜欢
      • 2016-03-28
      • 2011-05-23
      • 2015-09-18
      • 2020-01-19
      • 2022-11-02
      • 2020-02-04
      • 1970-01-01
      • 1970-01-01
      • 2016-09-11
      相关资源
      最近更新 更多