internal class jsonsplitverify}}
internal static bool isjson(string json)
#region 開頭是否問json
/// /// 開頭是否問json
///
///
///
private static bool isjsonstart(ref string json)
') || (s == '[' && e == ']');}}
return false;
}#endregion
#region 判斷是否為json檔案
/// /// 判斷是否為json檔案
///
/// json檔案
/// 錯誤的位置
///
internal static bool isjson(string json, out int errindex)
i = i + length - 1;
}if (cs.iserror)
}return !cs.arraystart && !cs.jsonstart;
}return false;
}#endregion
#region 獲取值的長度
/// /// 獲取值的長度(當json值巢狀以"
}else if (cs.childrenstart)//正常字元,值狀態下。
if (breakonerr && cs.iserror)
if (!cs.jsonstart && !cs.arraystart)//記錄當前結束位置。}}
return len;
}#endregion
#region 字元狀態
/// /// 字元狀態
///
private class charstate
//示例 ["aa",]
switch (c)
]":":3,"m":"c"}]}]
iserror = jsonstart && state == 0;//重複開始錯誤 同時不是值處理。
break;
case '}':
iserror = !jsonstart || (keystart != 0 && state == 0);//重複結束錯誤 或者 提前結束。正常的有{}
break;
case '[':
iserror = arraystart && state == 0;//重複開始錯誤
break;
case ']':
iserror = !arraystart || jsonstart;//重複開始錯誤 或者 json 未結束
break;
case '"':
case '\'':
iserror = !(jsonstart || arraystart); //json 或陣列開始。
if (!iserror)
]iserror = (state == 0 && keystart == -1) || (state == 1 && valuestart == -1);
}if (!iserror && arraystart && !jsonstart && c == '\'')//['aa',{}]
break;
case ':':
iserror = !jsonstart || state == 1;//重複出現。
break;
case ',':
iserror = !(jsonstart || arraystart); //json 或陣列開始。
if (!iserror)
else if (arraystart)//["aa,] [,] [{},{}]
}break;
case ' ':
case '\r':
case '\n'://[ "a",\r\n{} ]
case '\0':
case '\t':
break;
default: //值開頭。。
iserror = (!jsonstart && !arraystart) || (state == 0 && keystart == -1) || (valuestart == -1 && state == 1);//
break;}}
}#endregion
#region 設定字元狀態
///
private static bool setcharstate(char c, ref charstate cs)
]":":3,"m":"c"}]}]
#region 大括號
if (cs.keystart <= 0 && cs.valuestart <= 0)
else
cs.jsonstart = true;//開始。
return true;
}#endregion
break;
case '}':
#region 大括號結束
if (cs.keystart <= 0 && cs.valuestart < 2 && cs.jsonstart)
// cs.iserror = !cs.jsonstart && cs.state == 0;
#endregion
break;
case '[':
#region 中括號開始
if (!cs.jsonstart)
else if (cs.jsonstart && cs.state == 1)
#endregion
break;
case ']':
#region 中括號結束
if (cs.arraystart && !cs.jsonstart && cs.keystart <= 2 && cs.valuestart <= 0)//[{},333]//這樣結束。
#endregion
break;
case '"':
case '\'':
#region 引號
if (cs.jsonstart || cs.arraystart)
]else if ((cs.keystart == 2 && c == '\'') || (cs.keystart == 3 && c == '"'))
else}}
else if (cs.state == 1 && cs.jsonstart)//值階段必須是json開始了。
else if ((cs.valuestart == 2 && c == '\'') || (cs.valuestart == 3 && c == '"'))
else}}
}#endregion
break;
case ':':
#region 冒號
if (cs.jsonstart && cs.keystart < 2 && cs.valuestart < 2 && cs.state == 0)
cs.state = 1;
return true;
}// cs.iserror = !cs.jsonstart || (cs.keystart < 2 && cs.valuestart < 2 && cs.state == 1);
#endregion
break;
case ',':
#region 逗號 //["aa",]
if (cs.jsonstart)
cs.setdicvalue = true;
return true;}}
else if (cs.arraystart && cs.keystart <= 2)
return true;
}#endregion
break;
case ' ':
case '\r':
case '\n'://[ "a",\r\n{} ]
case '\0':
case '\t':
if (cs.keystart <= 0 && cs.valuestart <= 0) &&
break;
default: //值開頭。。
if (c == '\\') //轉義符號
else
}else
if (cs.jsonstart || cs.arraystart) // json 或陣列開始了。
else if (cs.valuestart <= 0 && cs.state == 1 && cs.jsonstart)//只有json開始才有值。
}break;
}return false;
}#endregion
#endregion
}
校驗json格式 介面的登入狀態校驗以及JWT
最近在網上和朋友聊天,發現他在資料介面中校驗登入狀態用的還是session,在我及時勸說和科普之後,他最終決定改用jwt,那麼接下來我們就聊一聊資料介面應該怎麼管理登入狀態以及什麼是jwt 其實token和session的原理是差不多的,都是服務端將對應使用者的乙個key sessionid,tok...
上傳檔案校驗
為了防止一些使用者將一些病毒檔案上傳到伺服器,我們一般需要對上傳的檔案做合法性校驗,當時有時候簡單的字尾和contenttype校驗任然還有風險,下面我們一起來討論一下上傳的檔案需要做哪些合法性校驗。1 檔案字尾校驗 這層校驗應該說是最基本的校驗了,我們不能允許使用者上傳一些exe jsp php ...
JAVA Execl檔案校驗
通過poi魔數判斷檔案型別 public static boolean i eclfile inputstream inputstream catch ioexception e return res 以上是通過流讀取檔案頭的魔數來校驗檔案型別。可避免使用者直接修改其他型別檔案字尾為 xls 或 x...