JSON.stringify中将忽略注释字段

时间:2017-07-15 16:35:40

标签: javascript arrays json node.js object

我正在使用模块将apache配置文件解析为json

  

https://github.com/tellnes/node-apacheconf

它的工作非常完美。当我执行JSON.stringify()时,生成的JSON对象不包含注释。 输出console.log(config)

{ ThreadsPerChild: [ '250', comments: [ [Array] ] ],
  MaxRequestsPerChild: [ '0', comments: [ [] ] ],
  Listen: [ '80', comments: [ [] ] ],
  ServerRoot: [ '"/www/Apache22"', comments: [ [] ] ],
  DocumentRoot: [ '"/THDL/thdl-site"', comments: [ [] ] ],
  ServerName: [ 'localhost:80', comments: [ [Array] ] ],
  ServerAdmin: [ 'admin@localhost', comments: [ [] ] ],
  ErrorLog: [ 'logs/error.log', comments: [ [] ] ],
  LogLevel: [ 'error', comments: [ [] ] ],
  LoadModule: 
   [ 'alias_module modules/mod_alias.so',
     'authz_host_module modules/mod_authz_host.so',
     'autoindex_module modules/mod_autoindex.so',
     'dir_module modules/mod_dir.so',
     'log_config_module modules/mod_log_config.so',
     'mime_module modules/mod_mime.so',
     'rewrite_module modules/mod_rewrite.so',
     'setenvif_module modules/mod_setenvif.so',
     'php5_module "C:/www/php5/php5apache2.dll"',
     comments: [ [Array], [Array], [Array], [Array], [Array], [], [Array], [], [] ] ],
  IfDefine: 
   [ { '$args': 'SSL', LoadModule: [Array] },
     comments: [ [Array] ] ],
  DefaultType: [ 'text/plain', comments: [ [] ] ],
  IfModule: 
   [ { '$args': 'dir_module', DirectoryIndex: [Array] },
     { '$args': 'mime_module',
       TypesConfig: [Array],
       AddType: [Array] },
     { '$args': '!php5_module', IfModule: [Array] },
     { '$args': 'php5_module', Location: [Array] },
     { '$args': 'ssl_module',
       Include: [Array],
       SSLRandomSeed: [Array] },
     { '$args': 'mod_alias.c', Alias: [Array] },
     comments: [ [], [], [Array], [], [], [Array] ] ],
  IndexIgnore: [ '.htaccess', comments: [ [] ] ],
  FilesMatch: 
   [ { '$args': '^.ht', Order: [Array], Deny: [Array] },
     comments: [ [] ] ],
  Redirect: [ '/thdl external link: http://localhost', comments: [ [] ] ],
  Directory: 
   [ { '$args': '/',
       Options: [Array],
       AllowOverride: [Array],
       Order: [Array],
       Allow: [Array],
       Satisfy: [Array] },
     { '$args': '/THDL/thdl-site',
       Options: [Array],
       AllowOverride: [Array],
       Order: [Array],
       Allow: [Array] },
     { '$args': 'C:/www/phpMyAdmin',
       Options: [Array],
       AllowOverride: [Array],
       order: [Array],
       deny: [Array],
       allow: [Array] },
     comments: [ [], [Array], [] ] ],
  Include: 
   [ 'conf/extra/httpd-autoindex.conf',
     'conf/extra/httpd-languages.conf',
     'conf/extra/httpd-info.conf',
     'conf/extra/httpd-manual.conf',
     'conf/extra/httpd-default.conf',
     'conf/Suite-extra/components.conf',
     comments: [ [Array], [Array], [Array], [Array], [Array], [Array] ] ],
  LoadFile: [ '"C:/www/php5/php5ts.dll"', comments: [ [Array] ] ] }

console.log(JSON.stringify(config))的输出:

{
  "ThreadsPerChild": [
    "250"
  ],
  "MaxRequestsPerChild": [
    "0"
  ],
  "Listen": [
    "80"
  ],
  "ServerRoot": [
    "\"/www/Apache22\""
  ],
  "DocumentRoot": [
    "\"/THDL/thdl-site\""
  ],
  "ServerName": [
    "localhost:80"
  ],
  "ServerAdmin": [
    "admin@localhost"
  ],
  "ErrorLog": [
    "logs/error.log"
  ],
  "LogLevel": [
    "error"
  ],
  "LoadModule": [
    "alias_module modules/mod_alias.so",
    "authz_host_module modules/mod_authz_host.so",
    "autoindex_module modules/mod_autoindex.so",
    "dir_module modules/mod_dir.so",
    "log_config_module modules/mod_log_config.so",
    "mime_module modules/mod_mime.so",
    "rewrite_module modules/mod_rewrite.so",
    "setenvif_module modules/mod_setenvif.so",
    "php5_module \"C:/www/php5/php5apache2.dll\""
  ],
  "IfDefine": [
    {
      "$args": "SSL",
      "LoadModule": [
        "ssl_module modules/mod_ssl.so"
      ]
    }
  ],
  "DefaultType": [
    "text/plain"
  ],
  "IfModule": [
    {
      "$args": "dir_module",
      "DirectoryIndex": [
        "index.html index.php index.aspx"
      ]
    },
    {
      "$args": "mime_module",
      "TypesConfig": [
        "conf/mime.types"
      ],
      "AddType": [
        "application/x-compress .Z",
        "application/x-gzip .gz .tgz"
      ]
    },
    {
      "$args": "!php5_module",
      "IfModule": [
        {
          "$args": "!php4_module",
          "Location": [
            {
              "$args": "/",
              "FilesMatch": [
                {
                  "$args": ".php[45]?$",
                  "Order": [
                    "allow,deny"
                  ],
                  "Deny": [
                    "from all"
                  ]
                }
              ]
            }
          ]
        }
      ]
    },
    {
      "$args": "php5_module",
      "Location": [
        {
          "$args": "/",
          "AddType": [
            "text/html .php .phps"
          ],
          "AddHandler": [
            "application/x-httpd-php .php",
            "application/x-httpd-php-source .phps"
          ]
        }
      ]
    },
    {
      "$args": "ssl_module",
      "Include": [
        "conf/extra/httpd-ssl.conf"
      ],
      "SSLRandomSeed": [
        "startup builtin",
        "connect builtin"
      ]
    },
    {
      "$args": "mod_alias.c",
      "Alias": [
        "/phpMyAdmin \"C:/www/phpMyAdmin\""
      ]
    }
  ],
  "IndexIgnore": [
    ".htaccess"
  ],
  "FilesMatch": [
    {
      "$args": "^.ht",
      "Order": [
        "allow,deny"
      ],
      "Deny": [
        "from all"
      ]
    }
  ],
  "Redirect": [
    "/thdl external link: http://localhost"
  ],
  "Directory": [
    {
      "$args": "/",
      "Options": [
        "FollowSymLinks"
      ],
      "AllowOverride": [
        "all"
      ],
      "Order": [
        "deny,allow"
      ],
      "Allow": [
        "from all"
      ],
      "Satisfy": [
        "all"
      ]
    },
    {
      "$args": "/THDL/thdl-site",
      "Options": [
        "Indexes FollowSymLinks"
      ],
      "AllowOverride": [
        "all"
      ],
      "Order": [
        "allow,deny"
      ],
      "Allow": [
        "from all"
      ]
    },
    {
      "$args": "C:/www/phpMyAdmin",
      "Options": [
        "None"
      ],
      "AllowOverride": [
        "None"
      ],
      "order": [
        "deny,allow"
      ],
      "deny": [
        "from all"
      ],
      "allow": [
        "from 127.0.0.1"
      ]
    }
  ],
  "Include": [
    "conf/extra/httpd-autoindex.conf",
    "conf/extra/httpd-languages.conf",
    "conf/extra/httpd-info.conf",
    "conf/extra/httpd-manual.conf",
    "conf/extra/httpd-default.conf",
    "conf/Suite-extra/components.conf"
  ],
  "LoadFile": [
    "\"C:/www/php5/php5ts.dll\""
  ]
}

注释字段在整个结构中完全被忽略。我怎样才能防止这种情况发生。

1 个答案:

答案 0 :(得分:1)

我认为你不能在数组中使用这样的键。

例如,尝试更改:

 DefaultType: [ 'text/plain', comments: [ [] ] ],

为:

 DefaultType: { type: 'text/plain', comments: [ [] ] },

对象包含值为{ key1: value1, key2: value2 }

的键

数组包含以逗号分隔的值:[ value1, value2 ]

对象还可以包含值为数组的值:{ key1: [ value1, value2 ] }

或多维:{ key1: [ value1, [ value2, value3 ] ] }

看起来配置对象的结构存在问题。我建议更改它以匹配我的示例。