2

我是使用 JSON 的新手。我知道这可能已经在这里被问过了,但是,我只是想咨询一下我是否在做正确的事情。

我需要为不同的页面创建一个动态表单。我需要能够为每个页面添加一个动态表单。从管理面板,我可以在页面模板中添加/编辑/删除字段——更改字段的顺序、名称、类型、值等。

所以,我所做的,我将动态表单字段存储在 json 中,对于每个页面中输入的数据,我也将其存储在 json 中。以下是存储在我的数据库中的示例 JSON 数据:

具有 2 个字段的动态表单的 JSON 结构:

{
"0":{
  "id":"511ddf15cb8ae_1", // generated using uniqid() and counter, to generate a unique id for each field
  "name":"Page Name #1",
  "type":"textfield",
  "validation":"email", 
  "require":"on",
  "value":""  //default value
},
"1":{
  "id":"511ddf15cb8ae_2",
  "name":"Field Name #2",
  "type":"checkbox",
  "validation":"none",
  "require":"on",
  "value":["item 1","item 2","item 3"]  //selection
}
}

存储输入值的 JSON:

{
"511ddf15cb8ae_1":   //the field id, used as key to be able to directly access the data
  "test new data",
"511ddf15cb8ae_2":
  ["item 1","item 2"]
}

我的主要问题是,是否可以使用 json 将输入的值存储在数据库中,还是应该单独存储输入的值 - db 表行。

任何想法以更好的方式做到这一点,或者这已经很好了吗?谢谢。

干杯

4

2 回答 2

0

取决于你接下来的计划:)。

如果您只打算稍后重建表单并使用输入的值填充(我相信您也在存储动态表单),那么您采用的方法非常好,因为您不需要重新构建使用复杂查询从输入值返回 json。

但是,如果您稍后对在各个字段中输入的值进行一些复杂的发现/查询,例如“特定用户在特定字段中输入特定值多少次?”,那将是乏味的。有点儿。如果您打算这样做,那么我建议您使用关系方法并将它们存储在表格中;动态表单和输入的值。

于 2013-02-18T16:01:55.233 回答
0

将它作为字符串存储在 SQL 数据库中是可以的,因为你总是可以stringifyparse但我发现这非常乏味,特别是当我想做 JOIN 操作或持久表示复杂结构时。既然您已经在 J​​SON 中拥有它,为什么不使用像MongoDB这样的 NoSQL 持久存储机制并存储 JSON 本身。

MongoDB 允许您以 BSON 格式保存 JSON 文档,然后对它们进行查询,这是您当前的实现所缺乏的。

事实上,您可以在他们的网站上打开交互式 MongoDB shell,并从那里使用以下方式对您的数据库进行原型设计:

> var page = {"name":"Page Name #1",   "type":"textfield",   "validation":"email",    "require":"on",   "value":"aValue"};
{
 "name" : "Page Name #1",
 "type" : "textfield",
 "validation" : "email",
 "require" : "on",
 "value" : "aValue"
 }
> db.pages.save(page);
"ok"

从那里开始,一旦添加了所有页面,您现在就可以进行强大的查询,例如,这将找到所有文本字段类型的页面:

db.pages.find({"type":"textfield"});

您还可以使用 values 字段执行更复杂和更强大的查询,但我将把它留给您。

于 2013-02-18T16:03:34.960 回答