0

この形式の JSON ファイルがあります。

[{
"item-id" : "0",
"item-name" : "Dwarf remains",
"item-examine" : "The body of a Dwarf savaged by Goblins.",
"shop-value" : "0.0",
"low-alch" : "0.0",
"high-alch" : "0.0",
"stab-bonus" : "0",
"slash-bonus" : "0",
"crush-bonus" : "0",
"magic-bonus" : "0",
"ranged-bonus" : "0",
"stab-defence" : "0",
"slash-defence" : "0",
"crush-defence" : "0",
"magic-defence" : "0",
"ranged-defence" : "0",
"strength-bonus" : "0",
"prayer-bonus" : "0",
},
{
"item-id" : "1",
"item-name" : "Toolkit",
"item-examine" : "Good for repairing a broken cannon.",
"shop-value" : "0.0",
"low-alch" : "0.0",
"high-alch" : "0.0",
"stab-bonus" : "0",
"slash-bonus" : "0",
"crush-bonus" : "0",
"magic-bonus" : "0",
"ranged-bonus" : "0",
"stab-defence" : "0",
"slash-defence" : "0",
"crush-defence" : "0",
"magic-defence" : "0",
"ranged-defence" : "0",
"strength-bonus" : "0",
"prayer-bonus" : "0",
}]

しかし、25 000のエントリで

しかし、ファイルには何か問題があります。

"prayer-bonus" : "0",

する必要があります

"prayer-bonus" : "0"

正規表現などを使用して最後のビットのみを置き換えるにはどうすればよいですか?

私はJavaを使用しています。

ちなみに、値は必ずしも「0」ではありません

では、すべてを置き換えるようにワイルドカードにするにはどうすればよいですか?

4

4 に答える 4

0

sed を使用します。

sed -i.bak 's/\("prayer-bonus" : "0"\),/\1/' file

任意の数に一致させるには:

sed -i.bak 's/\("prayer-bonus" : "[0-9]*"\),/\1/' file
于 2013-11-13T16:37:02.873 に答える
0

これを使用できます(Javaスタイルで記述され、replaceAll()メソッドで使用できます):

search: (?<!\\\\)(\"(?>[^\\\"]++|\\\\{2}|\\\\.)*+\"),(\\s*+})
replace: $1$2

このパターンの主な目的は、引用符内にある可能性があるエスケープされた二重引用符を避けることです。

例:

String pattern = "(?<!\\\\)(\"(?>[^\\\"]++|\\\\{2}|\\\\.)*+\"),(\\s*+})";
String result = yourJson.replaceAll(pattern, "$1$2");
于 2013-11-13T16:44:29.943 に答える