[英]How to parse a file in INI/JSON-like non-standard format?
假設我有以下(非標准)格式的文本文件:
xxx { a = v1; b = v2 } yyy { a = v3; c = v4 }
我無法將其更改為任何標准(INI / XML / YAML等)格式。
現在,我想在xxx
節(即v1
)中找到屬性a
的值。 在Java / Groovy中最簡單的方法是什么?
使用Groovy,您可以利用ConfigSlurper。
但是,您首先需要將有效值映射在一起,以免試圖找出v1, v2, v3, etc
是什么:
這似乎可行:
def input = '''xxx { a = v1; b = v2 }
|yyy { a = v3; c = v4 }'''.stripMargin()
def slurper = new ConfigSlurper()
// Find all words 'w' and make a map of [ w1:'w1', w2:'w2', ... ]
slurper.binding = ( ( input =~ /\w+/ ) as List ).collectEntries { w -> [ (w):w ] }
def result = slurper.parse( input )
println result
打印出來:
[xxx:[a:v1, b:v2], yyy:[a:v3, c:v4]]
(Groovy 1.8.4)
首先,您給出了一個示例,未指定格式。 在繼續之前,您需要掌握該格式的完整規范。 或者,如果沒有,則需要查看生成它的代碼,並對規范進行反向工程。
(如果您嘗試根據一個小例子來實現,那么解析器很有可能會遇到不符合您直覺的模式的現實例子。)
完成后,您可以尋找可以處理您的格式的現成解析器。 如果幸運的話,它可能與INI,JSON或YAML或其他足夠接近的解析器足夠接近(主要)起作用。
但是很有可能它不會,並且您將需要編寫自己的解析器。 您可以通過多種方式執行此操作,例如:
實際上,正確的選擇取決於實際格式的簡單程度。 我們不能從一個例子中看出這一點。
對於真正的INI格式的文件: 用Java解析INI文件的最簡單方法是什么?
在我看來,您在這里顯示的內容更像是JSON,而不是INI格式。 也許看看JSON解析庫。 事實是您沒有使用已建立的格式,因此您可能不會使用已建立的格式解析器。 最好的選擇是將正在處理的文件(如果可能)重構為眾所周知的格式。 除非絕對必要,否則不要嘗試重新發明輪子。
如果要處理非標准格式,可能不會有現成的解決方案。 您可能需要研究以下幾種方法:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.