iOS json字符串轉(zhuǎn)換成易讀格式

在查看json字符串時毫玖,往往看到的是沒有格式的一大段內(nèi)容,轉(zhuǎn)換格式之后,顯示則會更加的清晰明了付枫。

使用算法如下:
對輸入字符串烹玉,逐個字符的遍歷
1、獲取當(dāng)前字符阐滩。
2二打、如果當(dāng)前字符是前方括號、前花括號做如下處理:
如果前面還有字符掂榔,并且字符為“:”继效,打印:換行和縮進(jìn)字符字符串衅疙。
打恿ぁ:當(dāng)前字符。
前方括號饱溢、前花括號喧伞,的后面必須換行。打蛹ɡ伞:換行潘鲫。
每出現(xiàn)一次前方括號、前花括號肋杖;縮進(jìn)次數(shù)增加一次溉仑。打印:新行縮進(jìn)状植。
進(jìn)行下一次循環(huán)浊竟。
3、如果當(dāng)前字符是后方括號津畸、后花括號做如下處理:
后方括號振定、后花括號,的前面必須換行肉拓。打雍笃怠:換行。
每出現(xiàn)一次后方括號暖途、后花括號卑惜;縮進(jìn)次數(shù)減少一次。打幼な邸:縮進(jìn)露久。
打印:當(dāng)前字符欺栗。
如果當(dāng)前字符后面還有字符毫痕,并且字符不為“壳快,”,打诱虿荨:換行眶痰。
繼續(xù)下一次循環(huán)。
4梯啤、如果當(dāng)前字符是逗號竖伯。逗號后面換行,并縮進(jìn)因宇,不改變縮進(jìn)次數(shù)七婴。
這里有bug,更改為【并且當(dāng)前字符后方是雙引號或左大括號】
5察滑、打哟蚶濉:當(dāng)前字符。

轉(zhuǎn)換后的格式如下圖


image.png

具體實現(xiàn)代碼為

- (NSString *)tansformJSON:(NSString *)jsonString {
    NSString  *resultString = @"";
    NSInteger length = jsonString.length;
           int number = 0;
           char key = 0;
           
           //遍歷輸入字符串贺辰。
           for (int i = 0; i < length; I++)
           {
               //1户盯、獲取當(dāng)前字符。
               key = [jsonString characterAtIndex:i];
               
               //2饲化、如果當(dāng)前字符是前方括號莽鸭、前花括號做如下處理:
               if((key == '[') || (key == '{') )
               {
                   //(1)如果前面還有字符,并且字符為“:”吃靠,打恿蛘!:換行和縮進(jìn)字符字符串。
                   if((i - 1 > 0) && ([jsonString characterAtIndex:i] == ':'))
                   {
                       resultString = [resultString stringByAppendingString:@"\n"];
                       NSString *tempString = @"";
                       for (int j = 0; j <number; j ++) {
                           tempString = [tempString stringByAppendingString:@" "];
                       }
                       resultString = [resultString stringByAppendingString:tempString];

                   }
                   
                   //(2)打映部椤:當(dāng)前字符礁阁。
                   resultString = [resultString stringByAppendingString:[NSString stringWithUTF8String:&key]];

                   
                   //(3)前方括號、前花括號族奢,的后面必須換行姥闭。打印:換行歹鱼。
                   resultString = [resultString stringByAppendingString:@"\n"];
                   
                   //(4)每出現(xiàn)一次前方括號泣栈、前花括號卜高;縮進(jìn)次數(shù)增加一次弥姻。打印:新行縮進(jìn)掺涛。
                   number++;
                   NSString *tempString = @"";
                   for (int j = 0; j <number; j ++) {
                       tempString = [tempString stringByAppendingString:@" "];
                   }
                   resultString = [resultString stringByAppendingString:tempString];
                  
                   
                   //(5)進(jìn)行下一次循環(huán)庭敦。
                   continue;
               }
               
               //3、如果當(dāng)前字符是后方括號薪缆、后花括號做如下處理:
               if((key == ']') || (key == '}') )
               {
                   //(1)后方括號秧廉、后花括號伞广,的前面必須換行。打犹鄣纭:換行嚼锄。
                   resultString = [resultString stringByAppendingString:@"\n"];
                   
                   //(2)每出現(xiàn)一次后方括號、后花括號蔽豺;縮進(jìn)次數(shù)減少一次区丑。打印:縮進(jìn)修陡。
                   number--;
                   NSString *tempString = @"";
                   for (int j = 0; j <number; j ++) {
                       tempString = [tempString stringByAppendingString:@" "];
                   }
                   resultString = [resultString stringByAppendingString:tempString];
                   
                   
                   //(3)打硬捉摹:當(dāng)前字符。
                   resultString = [resultString stringByAppendingString:[NSString stringWithCString:&key encoding:NSUTF8StringEncoding]];
                   
                   //(4)如果當(dāng)前字符后面還有字符魄鸦,并且字符不為“宴杀,”,打邮耙颉:換行旺罢。
                   if(((i + 1) < length) && ([jsonString characterAtIndex:(i + 1)] != ','))
                   {
                       resultString = [resultString stringByAppendingString:@"\n"];
                   }
                   
                   //(5)繼續(xù)下一次循環(huán)。
                   continue;
               }
               
               //4绢记、如果當(dāng)前字符是逗號主经。逗號后面換行,并縮進(jìn)庭惜,不改變縮進(jìn)次數(shù)罩驻。
               if(key == ',')
               {
                   resultString = [resultString stringByAppendingString:[NSString stringWithUTF8String:&key]];
                   resultString = [resultString stringByAppendingString:@"\n"];
                   NSString *tempString = @"";
                   for (int j = 0; j <number; j ++) {
                       tempString = [tempString stringByAppendingString:@" "];
                   }
                   resultString = [resultString stringByAppendingString:tempString];
                  
                   continue;
               }
               
               //5、打踊ど蕖:當(dāng)前字符惠遏。
               resultString = [resultString stringByAppendingString:[NSString stringWithUTF8String:&key]];
           }
           
           return resultString;
}

添加縮進(jìn)時,沒有想到更好的方法骏啰,用了循環(huán)生成字符串节吮,希望大家評論區(qū)告知更好的解決方案,謝謝判耕。

NSString *tempString = @"";
                       for (int j = 0; j <number; j ++) {
                           tempString = [tempString stringByAppendingString:@" "];
                       }
                       resultString = [resultString stringByAppendingString:tempString];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末透绩,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子壁熄,更是在濱河造成了極大的恐慌帚豪,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件草丧,死亡現(xiàn)場離奇詭異狸臣,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)昌执,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進(jìn)店門烛亦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來诈泼,“玉大人,你說我怎么就攤上這事煤禽☆泶铮” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵檬果,是天一觀的道長娶桦。 經(jīng)常有香客問我,道長汁汗,這世上最難降的妖魔是什么衷畦? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮知牌,結(jié)果婚禮上祈争,老公的妹妹穿的比我還像新娘。我一直安慰自己角寸,他們只是感情好菩混,可當(dāng)我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著扁藕,像睡著了一般沮峡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上亿柑,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天邢疙,我揣著相機(jī)與錄音,去河邊找鬼望薄。 笑死疟游,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的痕支。 我是一名探鬼主播颁虐,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼卧须!你這毒婦竟也來了另绩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤花嘶,失蹤者是張志新(化名)和其女友劉穎笋籽,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體察绷,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡干签,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年津辩,在試婚紗的時候發(fā)現(xiàn)自己被綠了拆撼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片容劳。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖闸度,靈堂內(nèi)的尸體忽然破棺而出竭贩,到底是詐尸還是另有隱情,我是刑警寧澤莺禁,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布留量,位于F島的核電站,受9級特大地震影響哟冬,放射性物質(zhì)發(fā)生泄漏楼熄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一浩峡、第九天 我趴在偏房一處隱蔽的房頂上張望可岂。 院中可真熱鬧,春花似錦翰灾、人聲如沸缕粹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽平斩。三九已至,卻和暖如春咽块,著一層夾襖步出監(jiān)牢的瞬間绘面,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工侈沪, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留飒货,地道東北人。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓峭竣,卻偏偏與公主長得像塘辅,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子皆撩,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,452評論 2 348