2012-06-26 30 views
21

Tôi đang cố gắng gửi tới máy chủ của tôi tệp json. Định dạng json phải chính xác như thế này:Làm thế nào để chuyển đổi một cách chính xác một NSDictionary thành một định dạng json, trong iOS?

{ 
    "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 hardcoded này và làm việc như thế này:

NSString *jsonString = @"{\"eventData\":{\"eventDate\":\"Jun 13, 2012 12:00:00 AM\",\"eventLocation\":{\"latitude\":43.93838383,\"longitude\":-3.46},\"text\":\"hkhkjh\",\"imageData\":\"\",\"imageFormat\":\"JPEG\",\"expirationTime\":1339538400000},\"type\":\"Culture\",\"title\":\"accIDENTE\"}"; 

Vì vậy, tôi muốn làm điều tương tự nhưng sử dụng một nguyên nhân NSDictionary dĩ nhiên tôi không muốn để mã hóa tất cả dữ liệu của tôi. Vì vậy, tôi đang tạo ra một NSDictionary như thế này:

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

    NSMutableDictionary *eventData = [NSMutableDictionary dictionaryWithObjectsAndKeys:eventLocation,@"eventLocation", nil]; 
         [eventData setObject:@"Jun 13, 2012 12:00:00 AM" forKey:@"eventDate"]; 
         [eventData setObject:@"hjhj" forKey:@"text"]; 
         [eventData setObject:@"raw data" forKey:@"imageData"]; 
         [eventData setObject:@"JPEG" forKey:@"imageFormat"]; 
         [eventData setObject:@"1339538400000" forKey:@"expirationTime"]; 

    NSMutableDictionary *finalDictionary = [NSMutableDictionary dictionaryWithObjectsAndKeys:eventData,@"eventData", nil]; 
         [finalDictionary setObject:@"ELDIARIOMONTANES" forKey:@"type"]; 
         [finalDictionary setObject:@"accIDENTE" forKey:@"title"]; 

Bây giờ tôi phải chuyển đổi này sang định dạng json đúng, vì vậy mà tôi có thể gửi nó tới máy chủ của tôi. Tôi đã cố gắng sử dụng này:

NSError *error; 
     NSData *jsonData = [NSJSONSerialization dataWithJSONObject:finalDictionary 
                  options:NSJSONWritingPrettyPrinted 
                  error:&error] 

nhưng bây giờ khi tôi in jsonData tôi có được điều này:

jsonData: <7b0a2020 22657665 6e744461 74612220 3a207b0a 20202020 22696d61 6765466f 726d6174 22203a20 224a5045 47222c0a 20202020 22746578 7422203a 2022686a 686a222c 0a202020 2022696d 61676544 61746122 203a2022 72617720 64617461 222c0a20 20202022 65787069 72617469 6f6e5469 6d652220 3a202231 33333935 33383430 30303030 222c0a20 20202022 6576656e 744c6f63 6174696f 6e22203a 207b0a20 20202020 20226c6f 6e676974 75646522 203a2022 2d332e34 36222c0a 20202020 2020226c 61746974 75646522 203a2022 34332e39 33383338 33383322 0a202020 207d2c0a 20202020 22657665 6e744461 74652220 3a20224a 756e2031 332c2032 30313220 31323a30 303a3030 20414d22 0a20207d 2c0a2020 22747970 6522203a 2022454c 44494152 494f4d4f 4e54414e 4553222c 0a202022 7469746c 6522203a 20226163 63494445 4e544522 0a7d> 

này là gì chính xác ?? Làm thế nào tôi có thể chỉ chuyển đổi từ điển đó để 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" 
} 

Nếu có thể tôi muốn định dạng trên là một nguyên nhân NSString đó là những gì tôi đã được gửi đến máy chủ và nó đã làm việc. Tôi có nghĩa là một NSString, trong định dạng json như thế này. Cảm ơn bạn rất nhiều vì đã đọc tất cả những điều này! : D

Trả lời

38

Chuyển đổi của bạn tốt, NSData trông giống như vậy bởi vì đó là một loạt các byte!

Bạn cần phải chuyển nó sang chuỗi, hãy thử này:

NSString* aStr; 
aStr = [[NSString alloc] initWithData:aData encoding:NSUTF8StringEncoding]; 

Phương pháp:

+ (NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error 

Trả về một đối tượng NSData, NSData chỉ là một wrapper đối tượng cho phần trình bày byte, vì vậy bạn từ điển ở đó, nhưng ở dạng biểu diễn byte.

Sau đó, bạn sử dụng:

- (instancetype)initWithData:(NSData *)data encoding:(NSStringEncoding)encoding 

phương pháp này có đại diện byte của bạn và biến nó thành một chuỗi, bằng cách sử dụng mã hóa mà bạn cung cấp.

+4

Sử dụng tốt hơn 'mã hóa: NSUTF8StringEncoding' để tính các ký tự đặc biệt. –

+0

Đã chỉnh sửa, cảm ơn !! –

+3

Tôi thực sự không thể cảm ơn đủ .. – donparalias

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