【问题标题】:find and replace quotes inside quotes with regular expression in a JSON file在 JSON 文件中使用正则表达式查找和替换引号内的引号
【发布时间】:2013-01-23 13:43:59
【问题描述】:

我有一个非常大的 JSON 文件,其中包含近 30000 条记录。 一条记录如下所示:

{
  "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" 的值。

我如何找到所有这些引号并将它们替换为正则表达式。 我使用 sublime text 2 做我的正则表达式,但我不知道如何解决这个具体问题。

【问题讨论】:

  • 您是否必须在客户端执行此操作(我的意思是通过 Javascript)?你可以选择在 PHP 中处理这个吗?此外,您可以编写一个递归函数来检查每个变量的值并将引号替换为您想要的任何内容。
  • 这样的函数看起来如何?
  • 您是否有权访问(修改)创建此 JSON 文件的脚本?
  • 不,我无法访问 :(

标签: javascript json


【解决方案1】:

这里有两个例子:

这些有以下要求:

  • 值不能以逗号、冒号、右大括号或空格开头。

否则你必须改进它。第二个甚至允许值以空格开头,但也可能有一些其他副作用......

示例 1:

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

示例 2:

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

【讨论】:

    【解决方案2】:

    如果您有机会使用 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));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多