我正在将信息从 Android 平板电脑发送到 SQL Server。我正在使用 PHP 制作的 Web 服务执行此操作,以 JSON 格式在平板电脑中发送信息。它工作正常,但我有一个问题。看,JSON 中的元素之一就是数组本身。该数组可能有多个条目,也可能只有一个条目。我不确定你是否能理解我在说什么,但这里有一个例子:
<plant>
<inspection>
<problem>
<id></id>
<category></category>
<description></description>
</problem>
<problem>
<id></id>
<category></category>
<description></description>
</problem>
</inspection>
</plant>
在上面的这个例子中,代码运行良好。如您所见,在此示例中,检查有两个问题。如果有两个或更多问题,它工作正常。但是,当它只是一个问题时,JSON 不会将它写为数组,并且我在我的 Web 服务中读取它时遇到问题。这是我用来将数据转换为 JSON 的 Java 代码:
JSONObject holder = new JSONObject();
JSONObject plant;
JSONObject problem;
DatabaseHandler handler = new DatabaseHandler(getApplicationContext());
ArrayList<Plant> plants = handler.GetAllPlants();
Inspection inspection;
ArrayList<Problem> problems;
if (plants != null) {
for (int i = 0; i < plants.size(); i++) {
plant = new JSONObject();
// handler.SetSynced(plants.get(i));
plant.put("plantID", plants.get(i).getPlantID());
plant.put("dome", plants.get(i).getDome());
plant.put("potholder", plants.get(i).getPotHolder());
plant.put("pot", plants.get(i).getPot());
inspection = handler.GetInspectionSync(plants.get(i));
if (inspection != null) {
plant.put("inspectionID", inspection.getInspectionID());
plant.put("inspectionDate", inspection.getInspectionDate());
}
problems = handler.GetAllProblems(inspection);
for (int k = 0; k < problems.size(); k++) {
problem = new JSONObject();
problem.put("problemID", problems.get(k).getProblemID());
problem.put("categoryID", problems.get(k).getCategoryID());
problem.put("problem", problems.get(k).getProblem());
problem.put("nokernel", problems.get(k).getNoKernel());
plant.accumulate("problems", problem);
}
holder.accumulate("plants", plant);
}
我知道这很草率。该程序应该以完全不同的方式工作,但在最后一刻,用户改变了一切,我不得不即兴发挥我必须按时完成的事情。这是PHP代码:
if($conn) {
foreach ($input['plants'] as $plant) {
$query = 'INSERT INTO plants VALUES(' . $plant['plantID'] . ', ' . $plant['dome'] . ', ' .
$plant['potholder'] . ', ' . $plant['pot'] . ');';
$params = array(1, "some data");
$result = sqlsrv_query($conn, $query, $params);
$query = 'INSERT INTO inspections VALUES(' . $plant['inspectionID'] . ', ' . $plant['plantID'] . ', \'' .
$plant['inspectionDate'] . '\');';
$params = array(1, "some data");
sqlsrv_query($conn, $query, $params);
foreach($plant['problems'] as $problem) {
$queryP = 'INSERT INTO problems VALUES(' . $problem['problemID'] . ', ' . $problem['categoryID'] . ', ' .
$plant['inspectionID'] . ', \'' . $problem['problem'] . '\', \'' . $problem['nokernel'] . '\');';
fwrite($f, $queryP);
$params = array(1, "some data");
sqlsrv_query($conn, $queryP, $params);
}
}
任何帮助将不胜感激。这是我现在唯一需要解决的问题才能最终完成这个项目。