将JSONObject值作为单个实体存储在数据库中

时间:2017-01-06 10:56:31

标签: java arrays json

我有像这样的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作为数据库中的另一个实体, 任何帮助都会非常值得,请提前感谢。

2 个答案:

答案 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获取单个项目