需要在php中创建Json对象

时间:2017-12-13 08:27:26

标签: php json

enter image description here

我想使用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?

2 个答案:

答案 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);