2012-06-26 30 views
5

Tôi không chắc chắn nếu những gì tôi sẽ hỏi thực sự là một NSDictionary với nhiều phím nhưng ok.Làm thế nào để tạo một NSDictionary với nhiều phím?

Điều tôi muốn làm là tạo một NSDictionary với khóa và giá trị cho dữ liệu của tôi rồi chuyển đổi thành định dạng JSON. Định dạng JSON sẽ trông giống hệt như thế này:

{ 
    "eventData": { 
     "eventDate": "Jun 13, 2012 12:00:00 AM", 
     "eventLocation": { 
      "latitude": 43.93838383, 
      "longitude": -3.46 
     }, 
     "text": "hjhj", 
     "imageData": "raw data", 
     "imageFormat": "JPEG", 
     "expirationTime": 1339538400000 
    }, 
    "type": "ELDIARIOMONTANES", 
    "title": "accIDENTE" 
} 

tôi đã chỉ được sử dụng NSDictionaries như thế này:

NSArray *keys = [NSArray arrayWithObjects:@"eventDate", @"eventLocation", @"latitude" nil]; 
NSArray *objects = [NSArray arrayWithObjects:@"object1", @"object2", @"object3", nil]; 
dictionary = [NSDictionary dictionaryWithObjects:objects forKeys:keys]; 

Nhưng định dạng trên không phải là tất cả về chìa khóa - giá trị. Vì vậy, câu hỏi của tôi là làm thế nào để NSDictionary được, để phù hợp với định dạng JSON ?? Cảm ơn bạn đã đọc bài đăng của tôi và xin lỗi nếu có bất kỳ sự nhầm lẫn nào.

Trả lời

32

Bạn biết bạn có thể có NSDictionary bên trong một số khác NSDictonary phải không?

NSDictionary *eventLocation = [NSDictionary dictionaryWithObjectsAndKeys:@"43.93838383",@"latitude",@"-3.46",@"latitude", nil]; 

NSMutableDictionary *eventData = [NSDictionary dictionaryWithObjectsAndKeys:eventLocation,@"eventLocation", nil]; 
[eventData setObject:@"Jun 13, 2012 12:00:00 AM" forKey:@"eventDate"]; 
[eventData setObject:@"hjhj" forKey:@"text"]; 
. 
. 
. 
NSMutableDictionary *finalDictionary = [NSMutableDictionary dictionaryWithObjectsAndKeys:eventData,@"eventData", nil]; 
[finalDictionary setObject:@"ELDIARIOMONTANES" forKey:@"type"]; 
[finalDictionary setObject:@"accIDENTE" forKey:@"title"]; 
+0

Bạn đã bỏ lỡ dấu phẩy giữa @ "vĩ độ" và không. – DarkMoon

1

Dưới đây là cấu trúc:
đối tượng gốc của bạn là NSMutableDictionary
eventData - chìa khóa cho đối tượng NSMutableDictionary với các phím và các đối tượng:
-> Phím eventDate đối tượng NSString
-> Phím eventLocation đối tượng NSMutableDictionary với các phím và các đối tượng:
----> khóa latitude đối tượng NSNumber
----> khóa longitude đối tượng NSNumber
-> Phím text đối tượng NSString
-> Phím imageData đối tượng NSString sau chuyển đổi sang NSData
-> Phím imageFormat đối tượng NSString
-> Phím expirationTime đối tượng NSNumber
type chìa khóa cho đối tượng NSString
title chìa khóa cho đối tượng NSString

+0

Đó sẽ rất tốt nhưng bạn có thể giúp tôi với các nguyên nhân gây ra cú pháp obj-c i am very mới này? – donparalias

+0

Để tham khảo trong tương lai, hãy sử dụng cấu trúc graver, trong khi đó bạn có thể sử dụng mã tôi đã đăng. – Peres

+0

Có thể xem mã của @ JackyBoy – graver

13

Bây giờ với mục tiêu-C literals có cách tốt hơn, dễ dàng hơn và gọn gàng hơn để hoàn thành việc này. Đây là từ điển chính xác của bạn với cú pháp mới này:

NSDictionary *dictionary = @{ 
    @"eventData": @{ 
     @"eventDate": @"Jun 13, 2012 12:00:00 AM", 
     @"eventLocation": @{ 
      @"latitude": @43.93838383, 
      @"longitude": @-3.46 
     }, 
     @"text": @"hjhj", 
     @"imageData": @"raw data", 
     @"imageFormat": @"JPEG", 
     @"expirationTime": @1339538400000 
    }, 
    @"type": @"ELDIARIOMONTANES", 
    @"title": @"accIDENTE" 
}; 

// Prints: "43.93838383" 
NSLog(@"%@", dictionary[@"eventData"][@"eventLocation"][@"latitude"]); 
2

Làm thế nào để Tạo NSArray và với truy cập cho đối tượng sử dụng NSDictionary?

... Tạo NSArray

NSArray *studentkeys = [NSArray arrayWithObjects:@"studentName", @"studentBirthDate", @"studentCity", @"studentMobile" nil]; 

NSArray *objects = [NSArray arrayWithObjects:@"Pravin", @"27/08/1990", @"Bhavnagar",@"7878007531", nil]; 

...để truy cập vào NSArray Object Sử dụng NSDictionary

NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:objects forKeys:keys];         
0

nếu bạn muốn nhiều danh mục, bạn có thể làm theo định dạng này

NSDictionary *jsonObject = @{ 
          @"data1":@[ 
           @{ 
           @"title":@"A" 

           @"subData" : @[ 
           @{ 
            @"title":@"aa" 
           }] 
           } 

          ] 
         }; 
+0

vui lòng thêm giải thích cho mã của bạn –

+0

nếu bạn muốn quản lý nhiều danh mục bằng NSDictionary, bạn có thể làm theo định dạng này –

Các vấn đề liên quan