java - JSON 单值数组

标签 java php android json web-services

我正在将信息从 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);
        }
    }

任何帮助将不胜感激。这是我现在需要解决的唯一问题才能最终完成这个项目。

最佳答案

也许在:

之前
foreach($plant['problems'] as $problem) {

您可以添加以下内容:

if (is_assoc($plant['problems'])) {
   $plant['problems'] = array($plant['problems']);
}

还有其他地方:is_assoc function

function is_assoc($array) {
  return (bool)count(array_filter(array_keys($array), 'is_string'));
}

关于java - JSON 单值数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16816242/

相关文章:

java - 媒体播放器对象音量线性增加和减少的Android逻辑错误

java - OSGI HttpService 无法正确初始化/注入(inject)

java - SELECT APDU 无法正常工作

php - 无法在 PHP 中查看数据库中的表

java - 从处理程序调用时,asynctask 未获取 arraylist

android - (New) GCM消息收到,但如何解析?

java - 正则表达式问题 - 引号内的文本 block 之外的一个或多个空格

java - 如何用eclipse缩进流畅的界面模式 "correctly"?

javascript - 不在html标记中设置onclick属性的原因

php - 将服务器从 php 5.6 更新到 7.3,出现 PEAR 错误