我使用这些代码获取服务器上文件夹的文件列表:
<?php
if ($handle = opendir('.pic')) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
//$thelist = $thelist.$file.'<br>';
$thelist = $thelist.$file."\r\n";
}
}
closedir($handle);
}
echo $thelist;
?>
它工作正常,但我需要用json数组获取文件名,对于mysql我用这些代码来获取json数组:
$result = mysql_query("SELECT *FROM wall ORDER BY id DESC") or die(mysql_error());
if (mysql_num_rows($result) > 0) {
$response["products"] = array();
while ($row = mysql_fetch_array($result)) {
$product = array();
$product["name"] = $row["name"];
array_push($response["products"], $product);
}
$response["success"] = 1;
echo json_encode($response);
但我不知道如何更改它以使用json数组获取文件名,就像mysql一样。
更新: 我试试这些代码:
<?php
$thelist = array();
if ($handle = opendir('.pic')) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
$thelist[] = $file;
}
}
closedir($handle);
}
echo json_encode($thelist);
在android中我尝试用这些代码获取json:
List<NameValuePair> params = new ArrayList<NameValuePair>();
JSONObject json = jParser.getJSONFromUrl(url_all_products, params);
Log.d("All Products: ", json.toString());
我在logcat中有这个错误:
解析数据时出错org.json.JSONException:org.json.JSONArray类型的值[]无法转换为JSONObject
所以有人可以帮助我吗?
答案 0 :(得分:2)
我更喜欢使用glob()
来获取文件夹中的文件(和/或文件夹)列表。
首先,您应该初始化一个数组,然后再附加到该数组。
以下是我的解决方案:
<?php
$list = []; // Since 5.4.x you can use shorthand syntax to init an array
$dir = dirname(__FILE__); // Just to get the path to current dir
// glob returns an array with the files it found matching the search pattern (* = wildcard)
$files = glob($dir."/.pic/*");
// Looping through all the files found in ./.pic
foreach ($files as $file) {
// Removing the full path and appending the file to the $list array.
// Now it will look like ".pic/filename.ext"
$list[] = str_replace($dir."/", "", $file);
}
echo json_encode($list, JSON_PRETTY_PRINT); // JSON_PRETTY_PRINT for beautifying the output
?>
在旁注上,glob()
可以采取更多选项,您可以在php manual (glob)
建议更新nr 1
这个json的输出将是一个json数组,正如错误消息所说的那样。解决方案可以是将JSONObject json
更改为JSONArray json
。
另一方面,您可以通过在代码中进行一些小调整来使PHP脚本的输出成为json对象而不是数组。
而不是echo json_encode($list, JSON_PRETTY_PRINT);
,只需将$list
添加到另一个数组中,如下所示:
echo json_encode(['files' => $list], JSON_PRETTY_PRINT);
这将使解析器将其视为json对象,因为该数组具有字符串键(files
)而不是索引键(0, 1, ..., n
)
答案 1 :(得分:0)
创建一个文件名数组,json_encode:
<?php
$thelist = array();
if ($handle = opendir('.pic')) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
$thelist[] = $file;
}
}
closedir($handle);
}
echo json_encode($thelist);