繁体   English   中英

从 nsarray 获取特定记录

[英]get the specific record from nsarray

你好在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的记录

假设您的NSArray是 mainArr。

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

尝试上面的代码行。 希望它会帮助你。

您打印的 json 对象是NSDictionary NSArray (例如称为standardArr )。 例如,您期望的字典是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;
    }

}

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

希望这会有所帮助:)

您需要使用NSPredicateNSArray过滤您的对象。 以下代码段将从嵌套数组中查找对象。

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)

当您收到 JSON 数据时,没有什么可以强迫您将数据保留为您需要的确切形式。 通常这实际上是一个坏主意。 大多数人会定义一个包含 userID、tripID、tripPostDate、firstName、lastName 等的模型类,而不是返回一个字典数组,而是验证所有传入的数据,并创建一个模型对象数组。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM