0

ほぼ 30000 レコードの非常に大きな 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""
          ] ... ...

問題は、余分な二重引用符を含む多くの値があることです。これは 1 つの二重引用符にすることができますが、2 つまたは 3 つの追加の二重引用符にすることもできます。"documentation.title"私の例での値を参照してください。

これらの引用符をすべて見つけて正規表現に置き換えるにはどうすればよいですか。崇高なテキスト 2 を使用して正規表現を実行していますが、この特定の問題を解決する方法がわかりません。

4

2 に答える 2

1

以下に 2 つの例を示します。

これらには次の要件があります。

  • 値は、コンマ、コロン、右中括弧、または空白で始まらないでください。

そうでなければ、それを改善する必要があります。2番目のものは値が空白で始まることさえ許しますが、他の副作用もあるかもしれません...

例 1:

\"[A-Za-z0-9][^"]+\"\s*[^,:}\s]

例 2:

\"([A-Za-z0-9\s][^"]+\"\s*[^,:\]}\s]){2}
于 2013-01-23T14:32:11.443 に答える
0

PHP を使用する機会があり、JSON ファイルが PRETTY_PRINT で提供されることを確認できる場合 (出力例のように行が区切られている場合)... PHP ファイルを作成して、ファイル名を送信し、修正を取得できます。出力。これが例です。

header('Content-Type: application/json');

$file = @trim($_GET['file']);
if (empty($file) || ($contents = @file_get_contents($file)) === FALSE) {
    // handle errors here
    echo json_encode(array('error'=>'Invalid file!'));
    exit;
}
function escapeQuotes($m) {
    return $m[1].$m[2].preg_replace('~(?<!\\\\)(?<!^)"(?!$)~','\\"',$m[3]).$m[4];
}
$res = preg_replace_callback(
    '~^(\s*)("[^"\s]+"\s*:\s*)?(".*")(,?\s*)$~m',
    'escapeQuotes',$contents
);
echo json_encode(json_decode($res,true));
于 2013-01-25T04:19:22.260 に答える