2012-06-26 2 views
21

내 서버에 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" 
} 

난이 하드 코딩과 같은 일 : JSON 형식은 다음과 같이 정확하게 보일 것

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

관련 문제