【问题标题】:comments field are ignored in JSON.stringifyJSON.stringify 中的注释字段被忽略
【发布时间】:2017-07-16 02:00:16
【问题描述】:

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

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

它工作得非常完美。当我执行 JSON.stringify() 时,结果 JSON 对象不包含 cmets 。 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\""
  ]
}

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

【问题讨论】:

    标签: javascript arrays json node.js object


    【解决方案1】:

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

    例如,尝试改变:

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

    到:

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

    对象包含带有值的键:{ key1: value1, key2: value2 }

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

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

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

    您的配置对象的结构似乎存在问题。我建议更改它以匹配我的示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-19
      • 2012-09-09
      • 2015-01-09
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多