解析JSON数据并处理数组

时间:2014-05-03 15:47:59

标签: ios objective-c json nsarray

我正在使用Mantle来解析Yelp中的一些JSON数据。

对于每个返回的商家,我获得了NSArray个类别。这将是一个例子:

yelpCategories =     (
            (
        "Wine Bars",
        "wine_bars"
    ),
            (
        "Ice Cream & Frozen Yogurt",
        icecream
    )
);

yelpCategories是我保存的数组的名称。后来我试图将数组解析成一个字符串:

    NSMutableString *yelpCats = [[NSMutableString alloc] init];
    for (NSObject * obj in business.yelpCategories)
    {
        [yelpCats appendString:[NSString stringWithFormat:@"%@,",[obj description]]];
    }

问题在于上述问题。我正被返回一个字符串就像“(”所以我必须正确访问数组。我怎样才能正确访问每个对象,理想情况下我会寻找结束字符串o @“酒吧,冰淇淋和冰冻酸奶”

编辑

The categories array: (
        (
        Pubs,
        pubs
    )
)

最终编辑 - 提议的解决方案

for (NSArray *cats in business.yelpCategories)
{
    NSString *category = [cats objectAtIndex:0];
    if ([category length] > 0) {
        category = [category substringToIndex:[category length] - 1];
    }

    if (cats == business.yelpCategories.lastObject) {
        [yelpCats appendString:[NSString stringWithFormat:@"%@",category]];
    } else {
        [yelpCats appendString:[NSString stringWithFormat:@"%@, ",category]];
    }
}
cell.yelpCategories.text = yelpCats;

3 个答案:

答案 0 :(得分:2)

使用对象的描述可以看到您在调试器中看到的内容,其中包括额外的回车。

你想要做的是:

yelpCats = [yelpCategories componentsJoinedByString:@", "];

答案 1 :(得分:1)

@jeffamaphone的答案是正确和最好的做事方式,但是你的工作几乎可以起作用,我认为你只是对数组内容感到困惑。

yelpCategories数组是一个字符串数组,因此您不需要调用stringWithFormat或调用description方法。实际上[obj description]会返回一个字符串,所以你甚至不需要在你的例子中使用stringWithFormat,你就可以获得相同的输出。要使原始方法工作更改为:

NSMutableString *yelpCats = [[NSMutableString alloc] init];
for (id obj in business.yelpCategories)
{
    //obj is a string so we can just append it.
    [yelpCats appendString:obj]];
}

还注意到我将NSObject * obj更改为id obj,这是在objective-c中声明NSObjects的惯用方式和简写方式。在这个例子中,我实际上会使用(NSString *category in business.yelpCategories)来提高可读性。在这种情况下,您向每个人声明您希望数组中的每个对象都是一个字符串,然后如果您想在循环中使用NSString方法,那么您就不必对其进行强制转换。

答案 2 :(得分:0)

for (NSArray *cats in business.yelpCategories)
{
    NSString *category = [cats objectAtIndex:0];
    if ([category length] > 0) {
        category = [category substringToIndex:[category length] - 1];
    }

    if (cats == business.yelpCategories.lastObject) {
        [yelpCats appendString:[NSString stringWithFormat:@"%@",category]];
    } else {
        [yelpCats appendString:[NSString stringWithFormat:@"%@, ",category]];
    }
}
cell.yelpCategories.text = yelpCats;