我有一个json文件,在值中有很多双引号。 json文件差不多有27000条记录。
我想删除或替换值中的双引号,否则它不被接受为一个好的json文件。我怎么能这样做?
问题是在值中有一个双引号的记录,但也有记录中有多个引号。
除了替换或删除引号外,还可以删除整个键和值。反正我也不会用它。这样做更容易吗?
以下是json文件中1条记录的示例:
{
"adlibJSON": {
"recordList": {
"record": [
{
"@attributes": {
"priref": "4372",
"created": "2011-12-09T23:09:57",
"modification": "2012-08-11T17:07:51",
"selected": "False"
},
"acquisition.date": [
"1954"
],
"documentation.title": [
"A lot of text with a lot of extra double quotes like "this" and "this""
] ... ...
问题在于密钥的值:document.title
。
我有崇高的文字2,我用来查找和替换。
答案 0 :(得分:1)
有一种方法,但为了做到这一点,你必须确保你可以对你的数据做以下假设:
然后你会遵循这些步骤:
/* find first index of "[" after "documentation.title" */
n = s.indexOf("[", s.indexOf('"documentation.title"'));
/* Find index of closing "]" */
n2 = s.indexOf("]", n);
/* Get the substring enclosed by these indexes */
x = s.substr(n+1, n2-n-1);
/* Remove every double quotes in this string and rebuild the original string with the corrected value. */
s.substr(0, n) + '["' + x.replace(/"/g, "") + '"]' + s.substr(n2+1);
编辑:如果您对保留更正的值本身不感兴趣,可以用空字符串替换它。
答案 1 :(得分:0)
我不认为你可以it's not a regular language。
你可能会遇到与parsing HTML with regex相同的麻烦。
我认为你必须自己编写(或者发现你是否超级幸运)某种解析器......
答案 2 :(得分:0)
试试这个:
json.replace(/(^\s*|:\s*)"/gm, '$1[sentinel]')
.replace(/"(,?\s*$|:)/gm, '[sentinel]$1')
.replace(/"/g, '\\"').replace(/\[sentinel\]/g, '"');
在这里演示:http://jsfiddle.net/D83FD/
这不是一个完美的解决方案;数据的格式可能会破坏正则表达式。试一试,看看它是否适用于更大的数据集。
基本上我们正在寻找开头报价并用占位符值替换它们,找到结束引号并用占位符替换它们,反斜杠 - 转义所有剩余的引号,然后再用引号替换占位符。