如何按字母顺序对jSON文件进行排序并将它们分配给相应的字母以使用sectionIndexTitlesForTableView / sectionForSectionIndexTitle

时间:2017-01-25 16:33:15

标签: ios objective-c json parsing

这是我第一次在这里提问,所以请原谅我缺乏写作礼仪。 我有一个jSON数据文件,如下所示:

[ {
"category": "Feline",
"text": "CAT",
"definition": "Meow"   },   
{
"category": "Mammal",
"text": "DOG",
"definition": "Bark"   },  
{
"category": "Insect",
"text": "ANT ",
"definition": "buzz"   },   
{
"category": "Insect'",
"text": "MOSQUITO ",
"definition": "buzz"   },
{
"category": "Number'",
"text": "10",
"definition": "ten"   } 
]

我按如下方式导入它, dataList 是一个NSMutableArray,如果使用MutableArray是好的还是我应该使用NSDictionary,我也很困惑?:

-(void)readDataFromFile {

    NSString * filePath =[[NSBundle mainBundle] pathForResource:@"data" ofType:@"json"];

    NSError * error;
    NSString* fileContents =[NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:&error];

    if(error)
    {
        NSLog(@"Error reading file: %@",error.localizedDescription);
    }
    self.dataList = (NSMutableArray *)[NSJSONSerialization
                                JSONObjectWithData:[fileContents dataUsingEncoding:NSUTF8StringEncoding]
                                options:0 error:NULL]; 

}

我想根据' text' 按字母顺序对JSON数据进行排序 而且我正在使用部分和索引列表。我主要关注https://www.appcoda.com/ios-programming-index-list-uitableview/教程。

我很困惑如何对JSON数据进行排序,并将它们分成字母表部分,还有iOS联系人将数字放在'#'部分。 我如何实现这一目标?

提前致谢!

1 个答案:

答案 0 :(得分:0)

  

在下面的代码中,我创建了一个包含27个元素的2D数组(1个用于数字   和26为字母表,然后根据该值放置值   字符串初始字符。这段代码对我有用。希望如此   也适合你:)

        for (int section = 0; section < 27; section++)
        {
            [arrSections addObject:[NSMutableArray array]];
        }
        for (NSDictionary *item in SampleDictionary)
        {
            NSString *KeyValue = [item[@"DictionaryKEy"] capitalizedString];                    
             *//In your case its Text*
            int ascii = (int)[KeyValue characterAtIndex:kZero];

            if (ascii >= 65 && ascii <= 90)
            {
                [arrSections[(ascii - 64)] addObject:item];
            }
            else
            {
                [arrSections[0] addObject:item];
            }
        }