从nsarray获取特定记录

时间:2016-04-19 04:55:01

标签: ios swift nsarray

hello在nsarray中,数据就像这样

(
        {
        Trip =         {

            "trip_id" = 41;
            "trip_post_date" = "2016-03-28 07:52:19";

            "user_id" = 65;
        };
        User =         {

            "first_name" = irfan;
            "last_name" = sheikh;

            "user_id" = 65;
        };
        "arrival_country" =         {
            "city_name" = "Feldkirchen in Karnten";
            "country_name" = Austria;
            id = 272221;

        };
        "departure_country" =         {
            "city_name" = "Colonia La Tordilla";
            "country_name" = Argentina;
            id = 1234057;

        };
    },
        {
        Trip =         {

            "trip_id" = 40;
            "trip_post_date" = "2016-03-28 07:50:48";

            "user_id" = 65;
        };
        User =         {

            "first_name" = irfan;
            "last_name" = sheikh;


        };
        "arrival_country" =         {
            "city_name" = Karachi;
            "country_name" = Pakistan;
            id = 67008;

        };
        "departure_country" =         {
            "city_name" = Lahore;
            "country_name" = Pakistan;
            id = 112623;

        };
    }
)

我怎样才能获得具有旅行ID的记录。从代码中我怎样才能获得具有trip_id 41

的记录

4 个答案:

答案 0 :(得分:0)

假设您的NSArray是mainArr。

NSString *tripID = @"41";
NSArray *tripIDArr [mainArr valueForKey :@"Trip"]valueForKey : @"trip_id"];
 NSInteger index = [tripIDArr indexOfObject :tripID];
NSDictionary *dict = [mainArr objectAtIndex:index];

尝试以上代码行。希望它会对你有所帮助。

答案 1 :(得分:0)

您打印的json对象是NSArray standardArr(例如NSDictionary} desiredDict。例如,你期望的词典是NSArray *standardArr; //your array which you have put in your question NSDictionary *desiredRecord; //resulting record for (int i = 0; i < standardArr.count; i++) { NSDictionary *tempDict = [standardArr objectAtIndex:i]; NSDictionary *tempDict2 = [tempDict objectForKey:@"Trip"]; NSString *strID = [tempDict2 valueForKey:@"trip_id"]; if ([strID isEqualToString:@"41"]) { desiredRecord = tempDict; //if you want whole record //or desiredRecord = tempDict2; //if you want only Trip record //or desiredRecord = [tempDict objectForKey:@" User"]; //if you want User record etc..... break; } } 。现在你可以做这样的事情,

Json.obj()

快速转换它,我认为这不是一项艰巨的任务..!

希望这会有所帮助:)

答案 2 :(得分:0)

您需要使用NSPredicate来过滤NSArray中的对象。以下代码片段将从嵌套数组中找到对象。

<强> JSON

NSArray *tripAarray  = @[
 @{@"Trip":@{
             @"trip_id" : @"41",
             @"trip_post_date" : @"2016-03-28 07:52:19",
             @"user_id" : @65
     },
     @"User" :@{
             @"first_name" : @"irfan",
             @"last_name" : @"sheikh",
             @"user_id" : @65
     },
     @"arrival_country" :@{
             @"city_name" : @"Feldkirchen in Karnten",
             @"country_name" : @"Austria",
             @"id" : @272221
     },
     @"departure_country" :@{
             @"city_name" : @"Colonia La Tordilla",
             @"country_name" : @"Argentina",
             @"id" : @1234057
     }
   },
 @{@"Trip":@{
           @"trip_id" : @"42",
           @"trip_post_date" : @"2016-03-28 07:52:19",
           @"user_id" : @65
           },
   @"User" :@{
           @"first_name" : @"irfan",
           @"last_name" : @"sheikh",
           @"user_id" : @65
           },
   @"arrival_country" :@{
           @"city_name" : @"Feldkirchen in Karnten",
           @"country_name" : @"Austria",
           @"id" : @272221
           },
   @"departure_country" :@{
           @"city_name" : @"Colonia La Tordilla",
           @"country_name" : @"Argentina",
           @"id" : @1234057
           }
   }];

<强>目标C

// Create a Predicate with mapping to trip_id 
NSPredicate *filterByTrip = [NSPredicate predicateWithFormat:@"%K.%K CONTAINS[c] %@", @"Trip",@"trip_id",@"41"];   

// Filter your main array with predicate, resulting array will have filtered objects 
NSArray *filteredArray = [tripAarray filteredArrayUsingPredicate:filterByTrip];

NSLog(@"%@",filteredArray);

<强>夫特

// Create a Predicate with mapping to trip_id
var filterByTrip: NSPredicate = NSPredicate(format: "%K.%K CONTAINS[c] %@", "Trip", "trip_id", @"41")

// Filter your main array with predicate, resulting array will have filtered objects
var filteredArray: [AnyObject] = tripAarray.filteredArrayUsingPredicate(filterByTrip)
NSLog("%@", filteredArray)

答案 3 :(得分:0)

当您收到JSON数据时,没有任何东西会迫使您以所需的确切形式保存数据。这通常是一个坏主意。大多数人会定义一个包含userID,tripID,tripPostDate,firstName,lastName等的模型类,而不是返回一个字典数组,验证所有传入的数据,并创建一个模型对象数组。

如果你经常需要通过tripID访问一个这样的模型对象,你只需创建一个字典映射tripID到模型对象并查找该字典中的对象 - 一旦创建了字典,任何查找都非常快,即使有数千个旅行。