2017-04-25 165 views
-4

我有一個要求是在數據本身的JSON數據中找到雙引號。在字符串中查找文本

例如:{「關鍵」:「值」,「密鑰1」,「瓦爾」 UE1「}

現在瓦爾雙引號」 UE1需要檢索,而不是其他的雙引號。

任何想法如何實現這一目標?

+0

您的JSON似乎對我無效。如果可以的話,要麼逃脫這個醜陋的「,要麼改爲使用單引號。 – Antoine

回答

-1

用於從雙引號中提取數據的正則表達式爲(?<=")[^"]*(?="))。括號表示您可以用\1$1提取的第一個捕獲組。

但是,對於解析JSON(以及通常的解析標準),建議使用庫;它將比只是一個不包含邊緣情況的正則表達式更具可讀性,可理解性和安全性(並不是說這裏會有一些,而是將其作爲一般建議)

例如,如果您使用Java,Gson是一個很好的解析和生成JSON庫;如果您使用JavaScript,只需使用內置的JSON對象。如果你不使用這些語言中的任何一種,我肯定還有其他很好的庫。

希望這有助於

0

如何: \"([^(?:\"[,}])]*\"[^(?:\"[,}])]*)\"[,}]

這個正則表達式在一個冒號後跟一個空格和一個雙引號,另一個雙引號後跟一個comman或者關閉大括號。這些文本之間的文本必須包含*,至少一個引號和一些*。

* something表示任何內容(包括空字符串),不包含引號,後跟逗號或關閉大括號,因爲這會結束值。

應用於您的示例(更正以逗號替換逗號),它返回Val"ue1

String json = "{\"Key\": \"Value\", \"Key1\": \"Val\"ue1\"}"; 

Matcher m = Pattern.compile(": \"([^(?:\"[,}])]*\"[^(?:\"[,}])]*)\"[,}]").matcher(json); 

while (m.find()) 
{ 
    System.out.println(m.group(1)); 
}