2012-06-26 55 views
21

我想發送給我的服務器一個json文件。 JSON格式應如下所示:如何在iOS中正確地將NSDictionary轉換爲json格式?

{ 
    "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" 
} 

我存這一點,像這樣工作:

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\"}"; 

所以我想要做同樣的事情,但使用過程中的一個NSDictionary因爲我不想硬編碼我的所有數據。 所以我創建一個NSDictionary這樣的:

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"]; 

現在我有這個轉換爲正確的JSON格式,這樣我可以將它發送到我的服務器。 我嘗試使用這樣的:

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

但現在,當我打印jsonData我得到這個:

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> 

什麼,這正是??我如何才能轉換該字典看起來完全一樣:

{ 
    "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" 
} 

如果可能的話,我想上面的格式是一個NSString因爲那是我被髮送到服務器,它在工作。我的意思是一個NSString,以這種json格式。 非常感謝您因閱讀所有內容而煩惱! :D

回答

38

你的轉換很好,NSData看起來像這樣,因爲它是一堆字節!

你需要將其轉換爲字符串,試試這個:

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

的方法:

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

返回一個NSData對象,NSData的僅僅是一個字節表示一個對象包裝,所以你字典在那裏,但是以字節表示形式。

然後你使用:

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

這個方法需要您的字節表示,並把它變成一個字符串,使用您提供的編碼。

+4

更好地使用'encoding:NSUTF8StringEncoding'來說明特殊字符。 –

+0

編輯,謝謝! –

+3

我真的不能謝謝你.. – donparalias

相關問題