記一次奇葩的JSON解析

記一次奇葩的JSON解析

有些東西雌团,用的多了,會給人一種“我掌握了”的錯覺阁猜。json就是其中之一:你說你解析過無數(shù)json,錯了蹋艺,是你用別人的輪子解析了無數(shù)json剃袍,你熟悉的是api,而非json捎谨。

{
  "data" : [
    {
      "syncKey" : 53,
      "message" : {
        "msg_type" : 1,
        "timestamp" : 1512795235374,
        "message" : "{\"ride\":\"{\\\"aggregate_start_time\\\":\\\"20171209130300\\\",\\\"comment\\\":\\\"\\\",\\\"focus_arrive_first\\\":1,\\\"focus_taxi_ride\\\":{\\\"extra_fee\\\":0,\\\"from_poi\\\":{\\\"business\\\":\\\"廣順北大街\\\",\\\"city\\\":{\\\"baidu_city_id\\\":131,\\\"city_ename\\\":\\\"beijing\\\",\\\"city_name\\\":\\\"beijing\\\",\\\"id\\\":1,\\\"province_ename\\\":\\\"beijing\\\",\\\"province_name\\\":\\\"北京\\\"},\\\"latitude\\\":\\\"40.026140\\\",\\\"long_address\\\":\\\"來廣營(地鐵站)\\\",\\\"longitude\\\":\\\"116.473480\\\",\\\"short_address\\\":\\\"來廣營(地鐵站)\\\",\\\"street\\\":\\\"廣順北大街\\\"},\\\"passenger_info\\\":{\\\"avatar_url\\\":\\\"null\/20170331\/58ddcfeb30704.jpeg\\\",\\\"gender\\\":2,\\\"nick_name\\\":\\\"白云ddd\\\",\\\"phone_no\\\":\\\"16019920915\\\",\\\"score\\\":\\\"4.6\\\",\\\"user_cid\\\":\\\"984478b4-0c21-4b1c-b896-e87d6cf5ed4a\\\"},\\\"person_num\\\":1,\\\"price\\\":\\\"65.2\\\",\\\"review_closed\\\":0,\\\"status\\\":1,\\\"system_closed\\\":0,\\\"taxi_ride_id\\\":176197,\\\"to_poi\\\":{\\\"business\\\":\\\"中華路\\\",\\\"city\\\":{\\\"baidu_city_id\\\":131,\\\"city_ename\\\":\\\"beijing\\\",\\\"city_name\\\":\\\"beijing\\\",\\\"id\\\":1,\\\"province_ename\\\":\\\"beijing\\\",\\\"province_name\\\":\\\"北京\\\"},\\\"latitude\\\":\\\"39.915120\\\",\\\"long_address\\\":\\\"北京市東城區(qū)東長安街\\\",\\\"longitude\\\":\\\"116.403960\\\",\\\"short_address\\\":\\\"天安門\\\",\\\"street\\\":\\\"中華路\\\"}},\\\"pick_by_meter\\\":0,\\\"real_time\\\":1,\\\"score\\\":-25,\\\"start_distance\\\":\\\"0.3\\\",\\\"status\\\":\\\"new\\\",\\\"total_distance\\\":\\\"21.1\\\"}\"}"
      }
    }
  ],
  "finish" : true,
  "sid" : "7c0c14df-7591-42f7-b3d1-bd2cc5808c98",
  "type" : 5,
  "packageType" : 0
}

就是上面的這串json數(shù)據(jù)笛园,讓我花了一整天的時間去解析,始終不得方法侍芝,期間懷疑過自己,懷疑過輪子埋同,還懷疑Apple州叠。

1. 目標是獲取ride所對應(yīng)的數(shù)據(jù)結(jié)構(gòu)。首先凶赁,經(jīng)過三層脫殼咧栗,拿到如下內(nèi)容:
```
{
  "message" : "{\"ride\":\"{\\\"aggregate_start_time\\\":\\\"20171209130300\\\",\\\"comment\\\":\\\"\\\",\\\"focus_arrive_first\\\":1,\\\"focus_taxi_ride\\\":{\\\"extra_fee\\\":0,\\\"from_poi\\\":{\\\"business\\\":\\\"廣順北大街\\\",\\\"city\\\":{\\\"baidu_city_id\\\":131,\\\"city_ename\\\":\\\"beijing\\\",\\\"city_name\\\":\\\"beijing\\\",\\\"id\\\":1,\\\"province_ename\\\":\\\"beijing\\\",\\\"province_name\\\":\\\"北京\\\"},\\\"latitude\\\":\\\"40.026140\\\",\\\"long_address\\\":\\\"來廣營(地鐵站)\\\",\\\"longitude\\\":\\\"116.473480\\\",\\\"short_address\\\":\\\"來廣營(地鐵站)\\\",\\\"street\\\":\\\"廣順北大街\\\"},\\\"passenger_info\\\":{\\\"avatar_url\\\":\\\"null/20170331/58ddcfeb30704.jpeg\\\",\\\"gender\\\":2,\\\"nick_name\\\":\\\"白云ddd\\\",\\\"phone_no\\\":\\\"16019920915\\\",\\\"score\\\":\\\"4.6\\\",\\\"user_cid\\\":\\\"984478b4-0c21-4b1c-b896-e87d6cf5ed4a\\\"},\\\"person_num\\\":1,\\\"price\\\":\\\"65.2\\\",\\\"review_closed\\\":0,\\\"status\\\":1,\\\"system_closed\\\":0,\\\"taxi_ride_id\\\":176197,\\\"to_poi\\\":{\\\"business\\\":\\\"中華路\\\",\\\"city\\\":{\\\"baidu_city_id\\\":131,\\\"city_ename\\\":\\\"beijing\\\",\\\"city_name\\\":\\\"beijing\\\",\\\"id\\\":1,\\\"province_ename\\\":\\\"beijing\\\",\\\"province_name\\\":\\\"北京\\\"},\\\"latitude\\\":\\\"39.915120\\\",\\\"long_address\\\":\\\"北京市東城區(qū)東長安街\\\",\\\"longitude\\\":\\\"116.403960\\\",\\\"short_address\\\":\\\"天安門\\\",\\\"street\\\":\\\"中華路\\\"}},\\\"pick_by_meter\\\":0,\\\"real_time\\\":1,\\\"score\\\":-25,\\\"start_distance\\\":\\\"0.3\\\",\\\"status\\\":\\\"new\\\",\\\"total_distance\\\":\\\"21.1\\\"}\"}"
}
```
2. 仔細觀察,發(fā)現(xiàn)message對應(yīng)的是一個字符串虱肄,這難不倒我致板,取出字符串,繼續(xù)轉(zhuǎn)換為json咏窿,結(jié)果如下:
```
{
"ride":"{"aggregate_start_time":"20171209130300","comment":"","focus_arrive_first":1,"focus_taxi_ride":{"extra_fee":0,"from_poi":{"business":"廣順北大街","city":{"baidu_city_id":131,"city_ename":"beijing","city_name":"beijing","id":1,"province_ename":"beijing","province_name":"北京"},"latitude":"40.026140","long_address":"來廣營(地鐵站)","longitude":"116.473480","short_address":"來廣營(地鐵站)","street":"廣順北大街"},"passenger_info":{"avatar_url":"null/20170331/58ddcfeb30704.jpeg","gender":2,"nick_name":"白云ddd","phone_no":"16019920915","score":"4.6","user_cid":"984478b4-0c21-4b1c-b896-e87d6cf5ed4a"},"person_num":1,"price":"65.2","review_closed":0,"status":1,"system_closed":0,"taxi_ride_id":176197,"to_poi":{"business":"中華路","city":{"baidu_city_id":131,"city_ename":"beijing","city_name":"beijing","id":1,"province_ename":"beijing","province_name":"北京"},"latitude":"39.915120","long_address":"北京市東城區(qū)東長安街","longitude":"116.403960","short_address":"天安門","street":"中華路"}},"pick_by_meter":0,"real_time":1,"score":-25,"start_distance":"0.3","status":"new","total_distance":"21.1"}"
}
```
3. 嘿嘿嘿斟或,ride對應(yīng)的不就是我們需要的數(shù)據(jù)結(jié)構(gòu)嗎?簡直唾手可得集嵌。

然而萝挤,使用的時候卻發(fā)現(xiàn):哎喲臥槽,這玩意怎么各種取不到值案贰怜珍?我打印,不對啊凤粗,有內(nèi)容酥泛,怎么就是取不到呢?

就這樣反反復(fù)復(fù)折騰了一個晚上加一個上午嫌拣,睡覺的時候都在思考這個問題柔袁。

我累了,盯著屏幕發(fā)呆亭罪,突然發(fā)覺:ride對應(yīng)的這串東西怎么這么多\啊瘦馍,看得我頭皮發(fā)麻。誒应役,不對情组,這玩意不是轉(zhuǎn)義字符嗎燥筷?json中的key不需要轉(zhuǎn)義啊,難道這是院崇?

4. ride對應(yīng)的是一個字符串肆氓,而不是一個json

后臺,我操你大爺...

下面是圖解的形式描述整個過程底瓣,以資留念

后臺

圖1

圖2

操P痪尽!捐凭!

圖3
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末拨扶,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子茁肠,更是在濱河造成了極大的恐慌患民,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件垦梆,死亡現(xiàn)場離奇詭異匹颤,居然都是意外死亡糊余,警方通過查閱死者的電腦和手機溪北,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門密任,熙熙樓的掌柜王于貴愁眉苦臉地迎上來衅胀,“玉大人贤惯,你說我怎么就攤上這事被冒∈适遥” “怎么了货邓?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵公浪,是天一觀的道長摆尝。 經(jīng)常有香客問我,道長因悲,這世上最難降的妖魔是什么堕汞? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮晃琳,結(jié)果婚禮上讯检,老公的妹妹穿的比我還像新娘。我一直安慰自己卫旱,他們只是感情好人灼,可當(dāng)我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著顾翼,像睡著了一般投放。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上适贸,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天灸芳,我揣著相機與錄音涝桅,去河邊找鬼。 笑死烙样,一個胖子當(dāng)著我的面吹牛冯遂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播谒获,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼蛤肌,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了批狱?” 一聲冷哼從身側(cè)響起裸准,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赔硫,沒想到半個月后狼速,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡卦停,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了恼蓬。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惊完。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖处硬,靈堂內(nèi)的尸體忽然破棺而出小槐,到底是詐尸還是另有隱情,我是刑警寧澤荷辕,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布凿跳,位于F島的核電站,受9級特大地震影響疮方,放射性物質(zhì)發(fā)生泄漏控嗜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一骡显、第九天 我趴在偏房一處隱蔽的房頂上張望疆栏。 院中可真熱鬧,春花似錦惫谤、人聲如沸壁顶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽若专。三九已至,卻和暖如春蝴猪,著一層夾襖步出監(jiān)牢的瞬間调衰,已是汗流浹背膊爪。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留窖式,地道東北人蚁飒。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像萝喘,于是被迫代替她去往敵國和親淮逻。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,877評論 2 345

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