2012-06-26 13 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> 

これは正確には何ですか?私は上記の形式は、私がサーバーに送信していましたし、それが働いていたものだったNSStringの原因になりたい可能であれば

{ 
    "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を意味します。 このすべてを読んでいただきありがとうございます! :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