2016-04-26 139 views
3

我有創建配置文件的任務。配置文件是一個JSON文件。下面查找單詞並用文件中的單詞替換

"text": { 
     "data": "Click Here", 
     "size": 36, 
     "style": "bold", 
     "name": "text1", 
     "hOffset": 250, 
     "vOffset": 100, 
     "alignment": "center", 
     "onMouseUp": "sun1.opacity = (sun1.opacity/100) * 90;" 
    } 

的結構例與在JSON的「風格」屬性變化重複。所以我要複製上面的文字說50次。然後,我想用另一個由逗號分隔的文件輸入的不同樣式替換「style」屬性,如下所示。

bold,italic,cryptic 

輸出將被

"text": { 
      "data": "Click Here", 
      "size": 36, 
      "style": "bold", 
      "name": "text1", 
      "hOffset": 250, 
      "vOffset": 100, 
      "alignment": "center", 
      "onMouseUp": "sun1.opacity = (sun1.opacity/100) * 90;" 
     } 
"text": { 
      "data": "Click Here", 
      "size": 36, 
      "style": "italic", 
      "name": "text1", 
      "hOffset": 250, 
      "vOffset": 100, 
      "alignment": "center", 
      "onMouseUp": "sun1.opacity = (sun1.opacity/100) * 90;" 
     } 
"text": { 
      "data": "Click Here", 
      "size": 36, 
      "style": "cryptic", 
      "name": "text1", 
      "hOffset": 250, 
      "vOffset": 100, 
      "alignment": "center", 
      "onMouseUp": "sun1.opacity = (sun1.opacity/100) * 90;" 
     } 

是否有這樣做的更簡單的方法?

回答

4

使用GNU AWK爲gensub另一種解決方案:

awk -v RS= ' 
    NR==FNR { n = split($0, styles, /,/); next } 
    { 
    for (i=1; i<=n; i++) { 
     style = "\"" styles[i] "\"" 
     print gensub (/(["]style["]:).[^,]+/, "\\1" style, "G", $0); 
    } 
    } 
' style.txt config.file 

您與已逗號你想要的款式分隔值一個名爲style.txt開始。你將它們存儲在一個數組中。你繼續迭代你的配置文件,換掉樣式段,並用新的模式替換它。

我討厭承認JSON使用Perl,Ruby或python的JSON解析器可以更好地解析,但是由於您沒有對配置文件的任何控制權,所以將其作爲一次性選項發佈。

0

我不確定你想要應用它,但你可以讀取每次迭代相同的json,並在該迭代中更改需要的Style的值。只是一個想法。

+0

json的閱讀超出了我的控制範圍。我只是提供配置文件。所以我一定會在文件 –

+0

中做到這一點如果你只是修改json文件,那麼我不認爲你可以做的很多。等待看看其他人是否知道方法。如果您有權修改文件外部的文件(在代碼中),只需使用put methog即可。 JSONObject date = jsonArray.getJSONObject(0).getJSONObject(「day」); person.put(「day」,「Tuesday」); –

3

awk來救援!

$ awk -v RS= 'NR==FNR{t=$0;next} 
        {n=split($0,styles,","); 
         for(i=1;i<=n;i++) {s=t; 
             sub("bold",styles[i],s); 
             print s 
             } 
        }' template styles 

其中template是json格式的文本,styles是逗號分隔的文件(一個或多個行)。假設「粗體」只在模板中出現一次。

相關問題