2016-07-27 69 views
0

好吧,所以我想要做的是基於與名稱的正則表達式匹配來覆蓋JSON文件中的值。例如JSON內容:寫Json文件

{ 
"Main": { 
    "Modpack": "vanilla", 
    "Test1": "Value 1", 
    "Test2": "Value 2" 
}, 

"Setup": { 
    "Test1": "Value 1", 
    "Test2": "Value 2" 
}, 

} 

這裏是我使用來獲取值碼:

Function ParseConfig(File, Key) 
    Set objFSO = CreateObject("Scripting.FileSystemObject") 
    Set objFile = objFSO.OpenTextFile(File, 1) 
    Config = objFile.ReadAll 

    Dim oRE 
    Dim colMatches 
    Dim oMatch, I 

    Set oRE = New RegExp 
    oRE.Global = True 
    oRE.IgnoreCase = False 
    oRE.Pattern = """" & Key &""":\s""(.+?)""" 
    Set colMatches = oRE.Execute (Config) 

    For Each oMatch In colMatches 
    strNextmap = oMatch.SubMatches(0) 
    Next 

    If strNextmap = "" Or IsNull (strNextmap) Then 
    ParseConfig = "ERROR:- Config entry not found!" 
    Else 
    ParseConfig = strNextmap 
    End If 
    objFile.Close 
End Function 

我調用代碼:ParseConfig ("config", "Modpack")

我將如何修改代碼以…

  1. 打開我傳遞給它寫
  2. 找到正確值的文件。 (我假設我可以在這裏重新使用我的一些代碼)
  3. 替換該值。
  4. 保存文件。
+0

JSON是[類型2語法](https://en.wikipedia.org/wiki/Chomsky_hierarchy)。它不能通過正則表達式(類型3語法)進行分析。你需要一個真正的解析器。 –

+0

雖然它抓取了值,因爲格式是「name」:「value」。 這是我需要它做的。 – Bolte

回答

0

好了,沒有得到答覆和固執真正推動你沒有它,想出了這個解決方案...

Function WriteConfig (File, Key, Change) 

    ' Read file 
    Set objFSO = CreateObject("Scripting.FileSystemObject") 
    Set objFile = objFSO.OpenTextFile(File, 1) 
    Read = objFile.ReadAll 

    ' Find the string 
    Set oRE = New Regexp 
    oRE.Global = True 
    oRE.IgnoreCase = False 
    oRE.Pattern = """" & Key &""":\s""(.+?)""" 
    Set colMatches = oRE.Execute (Read) 

    For Each oMatch in colMatches 
    Match = oMatch.SubMatches(0) 
    Next 
    Write = Replace (Read, Match, Change, 1, -1, 0) 

    ' Save the file after modification. 
    Set objFile = objFSO.OpenTextFile(File, 2) 
    objFile.Write Write 
    objFile.Close 

End Function  

我把它與WriteConfig "config", "Test1", "Value New"

瞧!獲取這個VBScript的東西,我認爲... 只要incase任何人在這裏感興趣的是閱讀功能。

' PARSE JSON ------------------------ ' 
Function ParseConfig (File, Key) 
' Example: Modpack = ParseConfig ("config", "Modpack") 

    Set objFSO = CreateObject("Scripting.FileSystemObject") 
    Set objFile = objFSO.OpenTextFile(File, 1) 
    Config = objFile.ReadAll 

    Dim oRE 
    Dim colMatches 
    Dim oMatch, I 

    Set oRE = New Regexp 
    oRE.Global = True 
    oRE.IgnoreCase = False 
    oRE.Pattern = """" & Key &""":\s""(.+?)""" 
    Set colMatches = oRE.Execute (Config) 

    For Each oMatch In colMatches 
     strNextmap = oMatch.SubMatches(0) 
    Next 

    If strNextmap = "" Or IsNull (strNextmap) Then 
     ParseConfig = "ERROR:- Config entry not found!" 
    Else 
     ParseConfig = strNextmap 
    End If 
     objFile.Close 
End Function