0

我正在尝试从 MS-Access 数据库查询返回 JSON 字符串。我得到了记录集($rs),但试图循环返回 JSON,却不知道记录集中的所有字段。以下返回我想要的,但[["aaa":"bbb","ccc":"ddd"]]不是[{ ... }]我正在寻找的。

    $num_columns = $rs->Fields->Count ();
//echo $num_columns . "<br>";

$arrColumns = array();
for ($i=0; $i < $num_columns; $i++) {
    $arrColumns[] = $rs->Fields($i);
}

$arrResult = array();

while (!$rs->EOF) {
    $arrRow = array();
    for ($i=0; $i < $num_columns; $i++) {
        $arrRow[] = $arrColumns[$i]->value;
    }
    $arrResult[] = $arrRow;
    $rs->MoveNext();
}
//var_dump($arrResult);
echo json_encode($arrResult);
//print_r($arrResult);

[更新]:

完成了动态部分,但仍然存在结果问题。因为我 json_encode($Array)无法使用我的 JQuery 获得我想要的结果。

$num_columns = $rs->Fields->Count ();
$arrColumns = array();

for ($i=0; $i < $num_columns; $i++) {
    $arrColumns[] = $rs->Fields($i);
    $newArr[] = $rs->Fields($i)->name; 
}

$arrResult = array();

while (!$rs->EOF) {
    $arrRow = array();
    for ($i=0; $i < $num_columns; $i++) {
       $arrRow[$newArr[$i]] = $arrColumns[$i]->value;
    }
    $arrResult[] = $arrRow;

    $rs->MoveNext();
}

echo $_GET['callback'] . '(' . json_encode($arrResult) . ')';

我的 JSON 返回如下:[{"First":"John"},{"Last":"Doe"}] 一个包含在对象中的数组。我需要返回一个对象或一个数组,以便我可以在客户端处理,例如:{"First":"John"},{"Last":"Doe"}

    <script>
        $.getJSON('http://remote.domain.com/json.php?callback=?',function(res){
            alert('Results: '+res.Last);
        });
    </script>

我认为这可能是我的方式json_encode($Array);而不是使用课程?

4

2 回答 2

0

如果要以[{...}]格式返回,则需要将$arrRow值从数组更改为类。为简单起见,您可以利用stdClass()

尝试这样的事情:

while (!$rs->EOF) {
    $arrRow = array();

    $class = new stdClass();
    $class->field1 = $arrColumns[1]->value;
    $class->field2 = $arrColumns[2]->value;

    $arrRow[] = $arrColumns[$i]->value;

    $arrResult[] = $arrRow;
    $rs->MoveNext();
}

echo json_encode($arrResult);
于 2012-11-25T23:21:50.470 回答
0

您没有它,[["aaa":"bbb","ccc":"ddd"]] 因为它不是有效的json数组格式……请参阅JSON.ORG以了解规范

数组应表示为

在此处输入图像描述

而对象

在此处输入图像描述

你可以拥有的壁橱有阵列是

[["aaa","bbb"]["ccc","ddd"]]
于 2012-11-25T23:31:28.027 回答