我的情况如下。我有一个JSF表单,有三个输出和&相应的输入文件可以说:
outputtext1 - inputtext1
outputtext2 - inputtext2
outputtext3 - inputtext3
目前我使用backbean方法'Save'将它们存储到数据库中(hibernate对象让table1与主键table1.id一起存储)到字段table1.field1,table1.field2,table1.field3。
因此表中的每条记录都在inputtexts中插入了值。
我的问题是如何在数据库中存储表单数据,格式如下:
{“outputtext1:inputtext1”,“outputtext2:inputtext2”。“outputtext3:inputtext3”}
然后再次获取它们,解析并重建表单。我正在考虑将表单数据作为JSON对象进行操作......但我是Java + JSON的新手,所以一些指导对我来说真的很有用!
这是一个指示性示例,表单将通过动态创建并在运行中创建。
答案 0 :(得分:4)
为什么要序列化/反序列化JSON以将其直接发送到数据库?反序列化有其自身的问题,多个反序列化可以(而不是将)成为问题的根源。
您应该将字段保存为给定实体的属性,然后在Gson等库的帮助下,从实体生成JSON。
更新
由于您的表单是动态的,因此您可以使用一些自适应实体结构来保存您的数据。
您的实体可以具有Map<String,String>
属性,也可以是包含键值对的FieldRecord
个实体的集合。
我建议这样做,因为数据库中的JSON可能会导致复杂的问题,特别是如果您以后必须查询该数据。你必须处理JSON才能报告或查找哪些记录具有特定字段。这只是一个例子,事情会变得更复杂。
答案 1 :(得分:2)
简单,您需要在表中使用BLOB类型列来存储json,当您在java中检索它时,您只需要解码json并使用https://code.google.com/p/json-simple/建议它非常简单
答案 2 :(得分:1)
将JSONObject
转换为String
表单,然后存储。
当您阅读它时,将其转换回JSONObject
,如下所示:
JSONObject obj = new JSONObject(stringRepresentationOfJSON);
答案 3 :(得分:-2)
像这样改变hibernate-mapping JSONObject obj = new JSONObject(stringRepresentationOfJSON);