【发布时间】:2015-04-18 03:37:49
【问题描述】:
我正在尝试构建一个目录数据库,该数据库将与 Android 应用程序交互,以便在扫描条形码时进行查看。应用程序应该询问 MySQL 数据库并查询与零件相关的各种项目。 MySQL 部分的代码在这里:
<?php
if(isset($_POST['submit']) || isset($_POST['catalog'])) {
require("connect_to_mysql.php");
header("content-type: application/json");
$tables_result = mysql_query("SHOW TABLES") or die(mysql_error());
while ($table = mysql_fetch_row($tables_result)) {
$query_results = mysql_query("SELECT * FROM ".$table[0]." WHERE catalog = '".$_POST['catalog']."'") or die(mysql_error());
if (mysql_num_rows($query_results) > 0) {
$fields = mysql_query("SHOW COLUMNS FROM ".$table[0]);
while ($res = mysql_fetch_array($fields)) {
$names[] = $res[0];
}
$comments = mysql_fetch_row(mysql_query("SELECT table_comment FROM INFORMATION_SCHEMA.TABLES WHERE table_name='".$table[0]."'")) or die(mysql_error());
while($array = mysql_fetch_array($query_results)){
$rows["part"] = $comments[0];
$rows["fields"] = $names;
for($i = 0; $i < mysql_num_fields($query_results); $i++){
$rows[$names[$i]] = $array[$i];
}
echo json_encode($rows);
}
}
}
mysql_free_result($tables_result);
}
if(!isset($_POST['submit']) || !isset($_POST['catalog'])) {
echo "
<form method='post'>
<input type='text' name='catalog' />
<input type='submit' name='submit' />
</form>
";
}
?>
但是,例如,这样做的结果是:
{"part":"Lospa Tibial Baseplate","fields":["catalog","size"],"catalog":"01.10.50B","size":"11"}
我在 Android 客户端使用 JSOUP,它具有返回 JSONArray 的功能。我过去使用它时的 JSONArray 看起来像这样(我遇到问题的 JSON 部分是“字段”对象):
{"part":"Lospa Tibial Baseplate","fields":{["catalog","size"]},"catalog":"01.10.50B","size":"11"}
在对字段数组进行编码之前,我尝试直接对数组进行编码,但没有成功,并返回了一堆斜杠和无用的东西:
{"part":"Lospa Tibial Baseplate","fields":"[\"catalog\",\"size\"]","catalog":"01.10.50B","size":"11"}
我应该采取的最佳方法是什么?我宁愿不只是将两个括号硬编码到那里,但如果这是最后一个选项,请告诉我如何做到这一点,因为我不能只是 $rows["fields"] = "{".$names."}";
【问题讨论】:
-
尝试对循环中的每个项目进行编码总是一个坏主意,总是先在 PHP 中构建完整的数组结构,然后在完成之后再进行编码
-
JSOUP 真的更喜欢
"fields":{["catalog","size"]}?