【问题标题】:How to get integer value through json parsing如何通过json解析获取整数值
【发布时间】:2012-12-24 09:00:32
【问题描述】:

你们所有人……这可能是一个愚蠢的问题,但我是 iOS 新手……我需要我们的帮助…… 我正在做 Json 解析..获取一些值..我的 json 响应是:-

    {
        "_id" = 6001256351188711607;
        "access_level" = private;
        createdOn = "2012-12-17T07:06:42.09000";
        "created_by" = 9514682679942790960941872227340;
        description = "";
        keywords = "";
        location =         (
            "12.000023",
            "77.000012"
        );
        picture = "http://54120127762218290878972982207449539830674.jpg";
        "rel_interests" =         (
        );
        source = "Bank";
        "source_url" = "";
        title = ipl;
    },

 );
        "location_description" = "";
        picture = "http://54252499650705298384658551818639.jpg";
        "rel_interests" =         (
        );
        source = "";
        "source_url" = "";
        title = "Air";
    }

我通过使用此代码获得标题:-

    [titleArray addObject:[[_arrData objectAtIndex:j]valueForKey:@"title"]];

但是当我为位置执行此操作时,我会抛出异常......我怎样才能获得位置? 请帮助我实现这一目标...

【问题讨论】:

  • 您的“JSON”响应实际上不是 JSON。 title = Watch; location = ( "12.000000", "77.000000" ); 是 NSLogging 一个 NSDictionary 的结果吗?
  • 这个 JSON 应该是 location={"12","77"}。检查 json.org
  • 另外,_arrData 是什么?有什么例外?您需要提供异常堆栈跟踪。
  • @tom "location": [12.984805, 77.618312] 是我的 json 响应...
  • 另外,location 中的条目不是整数,而是浮点数。

标签: objective-c


【解决方案1】:

您可以使用以下代码获取第一个对象

[titleArray addObject:[[[[_arrData objectAtIndex:j]valueForKey:@"location"]objectAtIndex:0]intValue]];

第二个对象

[titleArray addObject:[[[[_arrData objectAtIndex:j]valueForKey:@"location"]objectAtIndex:1]intValue]];

已编辑 您有一个字典,其中有多个对象作为数组。在该数组的第一个对象中包含一个字典。在该字典中,只有您拥有位置数组。要访问它,您需要遵循以下代码

NSArray *location = [[_arrData objectAtIndex:1] objectForKey:@"location"];
double X = [[location objectAtIndex:0] doubleValue];
double locY = [[location objectAtIndex:1] doubleValue];

【讨论】:

  • nt 工作......我们如何在两个地方添加 objectatindex.. 有可能..我不知道???
  • 您的位置键包含数组,其中包含两个对象。要获得第一个对象,我们可以使用 objectAtIndex 0 并获得第二个对象,我们可以使用 objectAtIndex 1 ..主要是我们必须使用 intValue 或 floatValue
  • 你可以使用下面的代码..NSArray *Location = [[_arrData objectAtIndex:j] objectForKey:@"location"]; double X = [[Location objectAtIndex:0] doubleValue]; double Y = [[Location objectAtIndex:1] doubleValue];
  • 为什么它给空数组的异常索引 0 超出范围...但是数组不是空的.....
  • 您是否记录了数组计数..您只需记录您访问它的数组计数 b4。然后你会知道数组是否为空
【解决方案2】:
title = Watch;
location =         (
            "12.000000",
            "77.000000"
        );

假设这是 yourDataDict 字典。

[titleArray addObject:[yourDataDict valueForKey:@"title"];
float loc1 = [[[yourDataDict valueForKey:@"location"] objectAtIndex:0] floatValue];
float loc2 = [[[yourDataDict valueForKey:@"location"] objectAtIndex:1] floatValue];

【讨论】:

  • 我不知道,但您在 0 和 1 处给出 objectatindex ..但位置仅在一个位置,用逗号分隔..
  • 根据您的数据字典,[yourDataDict valueForKey:@"location"] 给出了数组,它有两个 nsstring 类型的元素。
【解决方案3】:
NSArray *loc = [[_arrData objectAtIndex:j] objectForKey:@"location"];
double locX = [[loc objectAtIndex:0] doubleValue];
double locY = [[loc objectAtIndex:1] doubleValue];

【讨论】:

  • 我不知道,但您在 0 和 1 处给出 objectatindex ..但位置仅在一个位置,用逗号分隔..
  • 您的 JSON 响应中的 location 字段表示为一个列表,解析后成为一个 NSArray,有 2 个条目。
  • thnx.. 但它给出的异常..index 0 超出了空数组的范围..bt 数组有值..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
  • 2018-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多