如何識別乙個字串是否Json格式

2021-09-30 23:25:29 字數 1905 閱讀 8470

1:開發框架(一整套基於配置型的開發體系框架)

2:cyq.data 資料層框架(持續的更新,最近也加入了sybase的支援)

3:工作流流程圖設計器。

由於這三個方面都涉及到json,所以就談談這些天在json上花下的心思。

很多人對於造輪子都會有自己的看法,這裡提一下個人的觀點: 

個人認為:

1:首要是要具備造輪子的能力,然後再討論造不造與浪不浪、輪子與時間的問題。

2:造輪子的、寫文章的,永遠比使用輪子的、看文章的,多經歷了一些、多思考一些、多知道一些。

所以,別嫌造輪子折騰,雖然的確很折騰,不是有那麼句:生命在於折騰,除了瞎折騰。

ps:本來文章是寫json常用的功能互動那塊相關的知識,所以才有這一段。 

不多扯了,扯多了都是蛋,還是回歸正題吧。 

a:js識別,eval一下,成功就是,失敗就掛。

b:c#識別,判斷開始和結束符號:{}或 

c:用正規表示式判斷。

上面abc答案都純忽悠,只要認真一下,都不靠譜了。

json需要分析的情況,比想象的要多,舉乙個不太簡單的json:

[1,,\r\n}, ,]},]"}]

從上面這個json中,就可以看出需要分析的有:

1:陣列和json陣列。 

2:鍵與值(無引號、雙引號)的識別

3:無限級值巢狀(陣列巢狀、json巢狀)

4:7個關鍵符號。

5:轉義符號、空格、換行、回車處理。 

還記得cyq.data裡jsonhelper的最初版本,僅處理了只有一級json的簡單情況,那時候分析json就靠以下兩種方法:

1:split 分隔。

2:迴圈 indexof 識別。

雖然偷工減料,投機取巧,但只要限定使用環境和條件、好在夠用,也夠簡單。

當然了,現在情況變了,把限定的環境和條件去除後,事實上,要分析起來就沒那麼簡單了。

由於放開了條件,需要考慮無限級遞迴的,於是看似split和indexof這種方式已經不奏效了。

字串的分析方法看似需要改朝換代了,但我仍給split和indexof尋求最後的機會。

經過層層思考與分析,發經沒折了,只有祭出終極必殺招了。

乙個萬能的解決方法,就是遍歷每個字元,然後記錄這個字元前後左右上下東南西北中發白各種狀態,再根據狀態來識別下乙個字元的動作。

這個字元狀態的記錄類,我前後不斷調整了n天,才終於感覺好像ok了。 

這是個漫長不斷除錯的過程,很折騰人。

雖然本文是關於識別json格式,實際上,它已經是json解析類的核心,用它可以演化出json的各種應用,有機會再介紹了。

事實上, 一開始是原打算寫json與xml互轉那一塊的,寫文的意原來自最近一周折騰工作流的流程設計器那一塊:

從xml出來到前端成為json,編輯完後回去又要轉回原始格式的xml存檔,所以在xml和json間,必須有一套協議,這些,大概是時間不夠,所以臨時變了乙個題目。 

夜已深,該閉眼去夢裡的世界旅遊了。 

SQL 判斷乙個字串是否在另外乙個字串中

eg str1 admin str2 1234,123admin,xcxx 比較str1是否在str2中 用常用的charindex,返回肯定是有值的,這裡自己動手寫乙個方法 檢查乙個字串是否在另外乙個字串中數,另外乙個字串元素用,隔開 create function dbo checkstrina...

判斷乙個字串是否在另乙個字串中

方法一 string str1 nihaoksdoksad string str2 ok int total 0 for string tmp str1 tmp null tmp.length str2.length tmp tmp.substring 1 system.out.println st...

乙個字串是否包含另乙個字串的問題

string s1 2,3,4,5,11,string s2 1,2個字串s1和s2,我用什麼方法判斷s2在不在s1裡呢,而不是把s1裡的 11,當成s2 using system using system.text.regularexpressions class test 在這個程式中,s1 和...