2016-03-04 20 views
0

我想知道如何識別包含JSON的字符串。我正在編寫一些監視功能,如果字符串包含JSON,我希望能夠做些什麼。如何最好地識別包含JSON的字符串?

這是事情,我解析的字符串不會是100%的JSON,它會有JSON內容。這裏有一個例子:

"bla bla bla {"key": "value"} bla bla bla" 

有了這個,我不能做傳統的技術,如嘗試,它解析爲JSON,看看它是否工作

我用正則表達式擺弄,但我似乎無法到找到一個好的解決方案,看起來好像不是凌亂

我確定了一個合理的誤差範圍,但有沒有什麼好的方法來做到這一點?

僅供參考:我在一個Java環境

EDIT1

好了,給你們更多的上下文是什麼我想做的事情。基本上我需要監視我們正在打印的日誌語句。根據之前的事件,我們在記錄不應記錄的JSON有效負載(特別是在調試級別以上)時遇到了一些問題。

我有其他的監控規則,但這是我想補充的。所以它不需要100%失效保護。

我刪除了逃脫的引號,他們確實沒有任何意義。

+0

這聽起來像是一個根本不好的主意。並非所有可以解析爲JSON的東西都是JSON。例如,「每個引用類型的默認值爲null,並且布爾類型的默認值爲false」包含兩個有效的JSON文檔。你確定你想要包含該JSON嗎?爲什麼你的例子已經逃脫了價值?如果你可以給我們更多的上下文,我們可能會提出更好的方法。 –

+0

從技術上講,只有對象和數組應該被支持爲頂級JSON,所以我想他可以找到{和[並得到字符串,直到匹配結束{或](照顧嵌套)... –

+0

我同意@JonSkeet,聽起來像一個壞主意。也許如果你只想做一個基本的檢查,它會足夠好嗎?像'\ {。*?\}'這樣的東西? – neuhaus

回答

1

匹配精確有效的json是非常棘手的,因爲它可能非常大。這與使用正則表達式解析json是一樣的。相反,您可以使用正則表達式檢查潛在的 JSON。我假設你想刪除它或做一些事情,所以過度拍攝和收集超過必要的數量是可以的。

您可以使用以下正則表達式字符串"(?:\\{\\\".+\\\"\\:.*\\}|\\[.*\\])"來貪婪地匹配類似json的任何東西。

通過找到的匹配,您可以執行一個正式的json解析來驗證它實際上是在刪除之前的json。

+0

我用你的方法去了,但不太貪心。我刪除了或條件,併爲我工作得很好。謝謝 –

0

如果它要使用您提供的表單,請提取所有可能的{somethingherebutIdon'tKnowwhat},然後解析它們是否爲json(與右括號匹配的開頭)。