2

値の中に二重引用符がたくさんあるjsonファイルがあります。json ファイルは、ほぼ 27000 レコードです。

値内の二重引用符を削除または置換したいのは、それ以外の場合は適切な json ファイルとして受け入れられないためです。どうやってやるの?

問題は、値の中に二重引用符が 1 つ含まれているレコードがある一方で、複数の引用符が含まれているレコードもあるということです。

引用符を置き換えたり削除したりする代わりに、キーと値全体を削除することもできます。とにかく使うつもりはありません。それを行うのは簡単ですか?

以下は、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 を持っています。これを使用して検索と置換を行います。

4

3 に答える 3

1

方法はありますが、そのためには、データについて次の仮定を行うことができることを確認する必要があります。

  • "documentation.title" は、キーとして使用される場合、データ内で 1 回だけ出現する必要があります。
  • 「documentation.title」で参照される配列値には、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);

編集: 修正された値自体を保持することに関心がない場合は、空の文字列に置き換えることができます。

于 2013-01-29T21:02:17.247 に答える
0

正規言語ではないので、できないと思います。

HTMLを正規表現で解析する場合と同様の問題が発生する可能性があります。

私はあなたが自分である種のパーサーを書く(またはあなたが超幸運であるかどうかを見つける)必要があると思います...

于 2013-01-29T20:59:46.507 に答える