我有像这样的JSON
{
"dlCovs":
{
"covabbrv":["MCWG","LMV"],
"dcIssuedt":["01-11-2011 XYZ","01-11-2011 XYZ"],
"vecatg":["01-11-2011 XYZ ","01-11-2011 XYZ"],"status":"valid"},
"status":"valid"
}
我有以下代码
if (dlCovs.has("vecatg")) {
this.COVCategory = dl_covData.getJSONObject("dlCovs").getJSONArray("vecatg").toString();
// this.COVCategory = dl_covData.get("vecatg").toString();
}
if (dlCovs.has("covabbrv")) {
// this.classOfVehicle = dl_covData.get("covabbrv").toString();
this.classOfVehicle = dl_covData.getJSONObject("dlCovs").getJSONArray("covabbrv").toString();
}
if (dlCovs.has("dcIssuedt")) {
// this.issueDate = dl_covData.get("dcIssuedt").toString();
this.issueDate = dl_covData.getJSONObject("dlCovs").getJSONArray("dcIssuedt").toString();
}
问题是它是否将entir String Value存储到数据库中, 像“covabbrv”的值一样存储像[“MCWG”,“LMV”]这样的值 但是我希望数组中存在的所有这些值应该单独存储,如MCWG作为单个实体,LMV作为数据库中的另一个实体, 任何帮助都会非常值得,请提前感谢。
答案 0 :(得分:1)
您需要规范化数据库以确保每列中只有原子字段。为避免重复,您需要将表拆分为两个表。请参阅https://en.wikipedia.org/wiki/Database_normalization。
在您的情况下,您需要一个单独的表格,其中包含covabbrv,并且主表的forign键,因此您可以为一个主要实体提供多个covabbrv。
您可以为此编写自己的代码,但由于您使用的是Java,我建议将您的JSON映射到Java Entity类,并对covabbrv字段使用@ElementCollection批注,如下所述: https://en.wikibooks.org/wiki/Java_Persistence/ElementCollection#Example_of_an_ElementCollection_relationship_to_a_basic_value_database
答案 1 :(得分:0)
if (dlCovs.has("vecatg")) {
this.COVCategory = dl_covData.getJSONObject("dlCovs").getJSONArray("vecatg").toString();
// this.COVCategory = dl_covData.get("vecatg").toString();
}
if (dlCovs.has("covabbrv")) {
JSONArray classOfVehicle = dl_covData.getJSONObject("dlCovs").getJSONArray("covabbrv");
for(int i = 0; i < classOfVehicle.length(); i++)
{
String item = classOfVehicle.getString(i);
// now you can save item in database
}
}
if (dlCovs.has("dcIssuedt")) {
// this.issueDate = dl_covData.get("dcIssuedt").toString();
this.issueDate = dl_covData.getJSONObject("dlCovs").getJSONArray("dcIssuedt").toString();
}
}
首先需要获得&#34; covabbrv&#34;的JSONArray。然后循环通过jsonArray获取单个项目