(ios)字符串與數(shù)組,字典腿倚,對象之間的轉(zhuǎn)換

  • app開發(fā)過程中纯出,與服務器數(shù)據(jù)交流時,服務器常常需要我們把一些集合以字符串的方式傳給服務器敷燎,下面就是一些字符串和數(shù)組暂筝,字典,對象之間的轉(zhuǎn)換硬贯。
/**
 *  判斷自己是否為空
 *
 *  @return <#return value description#>
 */
- (BOOL) isBlank
{
    if (!self.length ||
        self == nil ||
        self == NULL ||
        (NSNull *)self == [NSNull null] ||
        [self isKindOfClass:[NSNull class]] ||
        [self isEqualToString:@"(null)"] ||
        [self isEqualToString:@"<null>"] ||
        [self isEqualToString:@"null"] ||
        [self isEqualToString:@"NULL"]
        ) {
        return YES;
    }else {
        return NO;
    }
}
/**
 *  json字符串焕襟,轉(zhuǎn)成字典
 *
 *  字符串調(diào)用
 *  @return <#return value description#>
 */
- (NSDictionary *)stringJsonToDictionary{
    if ([self isBlank]) {
        return nil;
    }
    NSData *jsonData = [self dataUsingEncoding:NSUTF8StringEncoding];
    NSError *err;
    NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:jsonData
                         
                                                        options:NSJSONReadingMutableContainers
                                                          error:err];
     if(err) {
        NSLog(@"json解析失敗:%@",err);
        return nil;
    }
    return dictionary;
}


/**
 *  字典轉(zhuǎn)json字符串
 *
 *  字典調(diào)用
 *  @return <#return value description#>
 */
 - (NSString *)dictionaryToJsonString{
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:self
                                                       options:NSJSONWritingPrettyPrinted
                                                         error:nil];
    return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
}
/**
*  數(shù)組轉(zhuǎn)json字符串
*
*  數(shù)組調(diào)用
*  @return <#return value description#>
*/
- (NSString *)arrayToJsonString{
   NSError *parseError = nil;
   NSData *jsonData = [NSJSONSerialization dataWithJSONObject:arr options:NSJSONWritingPrettyPrinted error:&parseError];
   return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
   
}
/**
*  對象轉(zhuǎn)換為字典
*
*  @param obj 需要轉(zhuǎn)化的對象
*
*  @return 轉(zhuǎn)換后的字典
*/
+ (NSDictionary*)getObjectData:(id)obj {

  NSMutableDictionary *dic = [NSMutableDictionary dictionary];
  unsigned int propsCount;

  objc_property_t *props = class_copyPropertyList([obj class], &propsCount);

  for(int i = 0;i < propsCount; i++) {

      objc_property_t prop = props[i];
      NSString *propName = [NSString stringWithUTF8String:property_getName(prop)];
      id value = [obj valueForKey:propName];
      if(value == nil) {

          value = [NSNull null];
      } else {
          value = [self getObjectInternal:value];
      }
      [dic setObject:value forKey:propName];
  }

  return dic;
}

+ (id)getObjectInternal:(id)obj {

  if([obj isKindOfClass:[NSString class]]
     ||
     [obj isKindOfClass:[NSNumber class]]
     ||
     [obj isKindOfClass:[NSNull class]]) {

      return obj;

  }
  if([obj isKindOfClass:[NSArray class]]) {

      NSArray *objarr = obj;
      NSMutableArray *arr = [NSMutableArray arrayWithCapacity:objarr.count];

      for(int i = 0; i < objarr.count; i++) {

          [arr setObject:[self getObjectInternal:[objarr objectAtIndex:i]] atIndexedSubscript:i];
      }
      return arr;
  }
  if([obj isKindOfClass:[NSDictionary class]]) {

      NSDictionary *objdic = obj;
      NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithCapacity:[objdic count]];

      for(NSString *key in objdic.allKeys) {

          [dic setObject:[self getObjectInternal:[objdic objectForKey:key]] forKey:key];
      }
      return dic;
  }
  return [self getObjectData:obj];
  
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末饭豹,一起剝皮案震驚了整個濱河市鸵赖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拄衰,老刑警劉巖它褪,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異翘悉,居然都是意外死亡茫打,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進店門妖混,熙熙樓的掌柜王于貴愁眉苦臉地迎上來老赤,“玉大人,你說我怎么就攤上這事制市。” “怎么了息堂?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵荣堰,是天一觀的道長。 經(jīng)常有香客問我薇搁,道長渡八,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任宏娄,我火速辦了婚禮孵坚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘卖宠。我一直安慰自己忧饭,他們只是感情好,可當我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布刺洒。 她就那樣靜靜地躺著作媚,像睡著了一般帅刊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上赖瞒,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天栏饮,我揣著相機與錄音,去河邊找鬼境蔼。 笑死灶平,一個胖子當著我的面吹牛逢享,可吹牛的內(nèi)容都是我干的吴藻。 我是一名探鬼主播,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼侧但,長吁一口氣:“原來是場噩夢啊……” “哼航罗!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起燕侠,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤绢彤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蜓耻,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡饶氏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蔼卡。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片喊崖。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡荤懂,死狀恐怖节仿,靈堂內(nèi)的尸體忽然破棺而出掉蔬,到底是詐尸還是另有隱情矾瘾,我是刑警寧澤箭启,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布册烈,位于F島的核電站婿禽,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏扭倾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一驾中、第九天 我趴在偏房一處隱蔽的房頂上張望模聋。 院中可真熱鬧,春花似錦持痰、人聲如沸祟蚀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽罢维。三九已至,卻和暖如春肺孵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背悬槽。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工初婆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留猿棉,地道東北人屑咳。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像兆龙,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子慰安,可洞房花燭夜當晚...
    茶點故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內(nèi)容