如何从自定义格式的字符串创建JSON

时间:2014-03-26 15:34:32

标签: javascript json

我需要定义一个布局配置文件,如下所示

{
  'row' : {
    'height' : 20%,
    'content' : 'BLOCK_MENU'
  },
  'row' : {
    'col': {
      'width' : 30%,
      'content': 'BLOCK_SIDEBAR'
    },
    'col' : {
      'width' : 70%,
      'content' : 'BLOCK_MAIN_CONENT'
    }
  }
}

但这既不是有效的javascript对象,也不是json。我需要将它转换为json或js对象。由于此配置文件是由用户编写的,因此无法使格式过于严格和复杂。如果不使用LEX或野牛,有没有办法做到这一点?我在服务器端使用nodejs。

3 个答案:

答案 0 :(得分:2)

如果您需要重复的密钥,可能根本不需要密钥。您的对象可以是行对象的数组,每行可以有一个列对象数组。像这样:

[
    {
        "height" : "20%",
        "content" : "BLOCK_MENU"
    },
    {
        "height": "something",
        "content": "whatever",
        "cols": [
            {
                "width" : "30%",
                "content": "BLOCK_SIDEBAR"
            },
            {
                "width" : "70%",
                "content" : "BLOCK_MAIN_CONENT"
            }
        ]
    }
]

答案 1 :(得分:1)

如何将文件格式更改为:

[
  {
    "height" : "20%",
    "content" : "BLOCK_MENU"
  },
  {
    "cols": [
      {
        "width" : "30%",
        "content": "BLOCK_SIDEBAR"
      },
      {
        "width" : "70%",
        "content" : "BLOCK_MAIN_CONENT"
      }
    ]
  }
]

外部数组是一个行数组。一行有一个可选的“cols”数组,它是一个列数组。

如果高度和宽度总是百分比,我甚至可以替换百分比值,这样您的代码就不必将字符串转换为数字:

[
  {
    "height" : 20,
    "content" : "BLOCK_MENU"
  },
  {
    "cols": [
      {
        "width" : 30,
        "content": "BLOCK_SIDEBAR"
      },
      {
        "width" : 70,
        "content" : "BLOCK_MAIN_CONENT"
      }
    ]
  }
]

答案 2 :(得分:0)

{
    "row": {
        "col": { "width": "70%", "content": "BLOCK_MAIN_CONENT" }
    }
}

这将验证为json

在此验证Validate Json

{
    "row" : {
        "col_1": { "width" : "30%", "content": "BLOCK_SIDEBAR" },
        "col_2" : { "width" : "70%", "content" : "BLOCK_MAIN_CONENT" }
    }
}