2011-08-13 46 views
3

正則表達式允許我們指定字符串應匹配的某種格式,然後測試以查看字符串是否匹配,找出匹配的位置並捕獲反向引用。是否有像正則表達式那樣的東西,但用於匹配JSON而不是字符串?

我想對JSON有這樣的東西。試想一下:

{ "title": "My blog entry", 
    "author": { "name": "Joe", "id": 4324132 }, 
    "comments: [ 
    "first!!!", 
    "Very insightful!", 
    "A++ would read again" 
    ] 
} 

你可能喜歡的東西匹配這個:

{ "title": (title), 
    "author": *, 
    "comments": [ 
    "first!!!", 
    ... 
    ] 
} 

(這將返回成功,並捕獲title綁定到值"My blog entry"

這只是一個例子。對於從驗證API響應到從JSON提取信息到轉換JSON甚至(la RE替換)的所有內容來說,這一切都是有用的。

任何人都看過類似的東西?令人驚訝的是,在相同的上下文中搜索正則表達式和JSON只會導致人們試圖用正則表達式解析JSON。 EW。

+1

您可能可以使用JSONPath(http://goessner.net/articles/JsonPath/)來做你想做的事,但它不完全是一個正則表達式引擎。 – Starkey

+0

聽起來你正在尋找一種用於驗證/使用JSON的'外部'域特定語言(DSL)。我還沒有見過類似的東西,但是如果您有經驗或想學習lexing/parsing/ANTLR /等,您可能可以爲此創作自己的DSL。 –

回答

1

有幾個工具可以幫助你做到這一點,雖然不完全是正則表達式的。

首先看來你需要驗證你的數據,因爲你可以使用JSON Schema。其次,要提取標題,假設您不想解碼json字符串,則可以使用JSONPath(如果使用的是JS或PHP),也可以使用JsonGrep(對於CLI或Python)。 CLI解析也有jshon

+0

我不是問「我可以通過拼湊不同的代碼塊來實現類似的功能嗎?」 - *課程*有辦法驗證和訪問JSON,它只是網絡上最流行的數據交換格式之一。用類似jshon的方式迴應這個問題,就像通過告訴他們尋找RegExps的方式來響應MS Word的搜索和替換功能。 :-) – agnoster

+0

夠公平的,但假設你已經知道這些庫/工具,那麼恐怕你的問題的答案是否:) – Seldaek

+0

夠公平的。時間去黑客!我想部分只是想確保我沒有重新發明輪子 - 或者至少我正在構建一個有用的車輪變體。 – agnoster

1

你應該檢查出json:select - 這就像JSON的CSS選擇器......它與處理結構化數據時的「正則表達式」非常接近。

如果您想從命令行使用它,請查看underscore-cli,它將「select」作爲其命令之一公開。

0

jsonmatch是一個圖書館,做你正在尋找的驗證部分。它比上面接受的答案中引用的JSON模式庫稍微簡單一些。如果你想擴展它來捕獲,拉請求熱烈歡迎;)。

相關問題