我想使用php创建一个json对象,因为我需要使用d3.js
创建堆积条形图,因此我使用oracle表中的数据并需要json数据,如上图所示。
我的表有这3列。 (ID,NAME,Layers)如: -
ID, NAME, Layers
1 ABC a:8,b:10
2 WWW c:8,d:7
当我从oracle获取数据时,我的php代码是: -
while (($row = oci_fetch_array($stid, OCI_ASSOC))) {
$streamArr[] = $row;
}
header("Access-Control-Allow-Origin: *");
echo json_encode($streamArr);
我收到此错误: -
Warning: [json] (php_json_encode) type is unsupported, encoded as null in line 48 json output as:- [["1","ABC",{"descriptor":null}],["2","WWW",{"descriptor":null}]]
can you please help me in rectifying with this issue?
答案 0 :(得分:1)
错误消息指的是您在示例中未提及的字段。也许只是不选择不需要的字段?
如果你解决了这个问题,你仍然无法获得所需的JSON结构。要在生成的JSON中将_Dictionary
作为layers
的每个元素中的对象,您需要在编码之前将存储在数据库中的字符串值转换为PHP数组。
你可以用类似的代码来做到这一点:
data
答案 1 :(得分:1)
@marekful回答非常好,不易理解,但效率高,简短!
在这里你有更长的时间,效率不高,但可能更容易获得。
$streamArr = array();
while (($row = oci_fetch_array($stid, OCI_ASSOC)))
{
// Get ID and NAME
$data = array(
'id' => $row['ID'],
'name' => $row['NAME'],
'layers' => array()
);
// Get Layers by split by comma
$layers = explode(',', $row['layers']);
foreach ($layers as $layer) {
// Get layer parts by slit with double-point
$layersPart = explode(':', $layer);
foreach ($layersPart as $key => $value) {
$data['layers'][$key] = $value;
}
}
// Add to global array
$streamArr[] = $data;
}
echo json_encode($streamArr);