我正在從Android平板電腦向SQL Server發送信息。我正在用PHP製作的Web服務執行此操作,以JSON格式發送平板電腦中的信息。它工作正常,但我有一個問題。請參閱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);
}
我知道這很sl。。該方案應該以完全不同的方式工作,但在最後一刻,用戶改變了一切,我不得不準時準時完成。這是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);
}
}
任何幫助將不勝感激。這是我現在唯一需要解決的問題,最終完成這個項目。
這是在談論JSON,但樣品是表現出XML。 – Orangepill
只是在檢查標記的內容上進行計數,如果它具有> 1個子部分,則將其視爲數組/多個元素,如果其具有一個或更少的元素則視爲單個元素。 – Dave
JSON類似於'{plant:{inspection:{problems:[{id:12,category:15,description:'This is a demo'},{...},{...} ...] }}}}' – JoDev