aopki
aopki

Reputation: 310

comments field are ignored in JSON.stringify

I'm using a module to parse apache configuration files into json

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

it works just perfect . when I perform JSON.stringify() the resulted JSON object doesn't contain comments . output of 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] ] ] }

output of 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\""
  ]
}

comments field is completely ignored in the whole structure . how can I prevent this from happening .

Upvotes: 0

Views: 531

Answers (1)

agm1984
agm1984

Reputation: 17132

I don't think you can use keys like that inside arrays.

For example, try changing:

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

to:

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

Objects contain keys with values: { key1: value1, key2: value2 }

Arrays contain comma separated values: [ value1, value2 ]

Objects can also contain values that are arrays of values: { key1: [ value1, value2 ] }

or multi-dimensional: { key1: [ value1, [ value2, value3 ] ] }

It looks like a problem with the structure of your config object. I recommend changing it to match my examples.

Upvotes: 1

Related Questions