2016-04-26 131 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是逗号分隔的文件(一个或多个行)。假设“粗体”只在模板中出现一次。