将远程csv文件转换为JSON后,我有以下json
将csv的代码转换为json
/////////////////////////////////////////////////////////
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, '');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Token ****',
'Accept-Version: ***',
));
$data = curl_exec($ch);
///////////////////////////////////////////////////////////////
if (curl_errno($ch)) {
print "Error: " . curl_error($ch);
} else {
// Show me the result
//var_dump($data);
curl_close($ch);
$array = array_map("str_getcsv", explode("\n", $data));
$encode = json_encode($array, true);
///////////////////////////////////////
它产生了这个:
[
"Timestamp",
"Point",
"Value",
"2016-03-11T14:40:00+00:00",
"ategho-leg_1-8",
"487.0",
"2016-03-11T14:40:00+00:00",
"ategho-leg_2-8",
"488.0",
"2016-03-11T14:40:00+00:00",
"ategho-leg_3-8",
"484.0",
"2016-03-11T14:40:00+00:00",
"ategho-temperature_long-8",
"466.0",
"2016-03-11T14:40:00+00:00",
"ategho-temperature_short-8",
"198.0",
"2016-03-11T14:45:00+00:00",
"ategho-leg_1-8",
"482.0",
"2016-03-11T14:45:00+00:00",
"ategho-leg_2-8",
"490.0",
"2016-03-11T14:45:00+00:00",
"ategho-leg_3-8",
"479.0",
"2016-03-11T14:45:00+00:00",
"ategho-temperature_long-8",
"464.0",
"2016-03-11T14:45:00+00:00",
"ategho-temperature_short-8",
"199.0",
null
我想把它变成数据用于morris图表,它想要这种格式的数据:
[
{"Timestamp":"2016-03-11T14:40:00+00:00", "Point":"ategho-leg_1-8", "Value":"487.0"}
]
我已经搜索了堆栈并尝试过数字的东西,但我无法让它切换格式。我也试过这样的东西:
$new_final = array();
foreach($array as $value) {
foreach($value as $sub_value) {
$new_final[] = $sub_value;
}
}
echo json_encode($new_final);
感谢任何帮助。感谢
EDIt:第一个答案给了我这样的代码:
{
"Timestamp":[
"2016-03-11T14:40:00+00:00",
"ategho-leg_3-8",
"484.0"
],
"Point":[
"2016-03-11T14:40:00+00:00",
"ategho-temperature_long-8",
"466.0"
],
"Value":[
"2016-03-11T14:40:00+00:00",
"ategho-temperature_short-8",
"198.0"
]
},
答案 0 :(得分:1)
最好的方法是直接处理来自csv的数据,而无需在JSON中进行预编码。 顺便说一句,这将有效:
$data = json_decode( $json );
$result = array();
for( $i = 3; $i< count( $data ); $i=$i+3 )
{
$result[] = array
(
'Timestamp' => $data[$i],
'Point' => $data[$i+1],
'Value' => $data[$i+2]
);
}
echo json_encode( $result );
的 eval.in demo 强>
基本上,你需要一个从第3项开始并且重复每3项的for()`循环,然后你可以使用 morris chart 格式向主数组添加一个关联数组。
在您的示例中,上一个JSON项目为Null,因此在转换为JSON之前,您必须确定unset()
或unset()
的最后一个元素是$result
。
通过修改后的问题,您可以通过以下方式处理数组:
$result = array();
for( $i = 1; $i < count( $array ); $i++ )
{
$result[] = array
(
'Timestamp' => $array[$i][0],
'Point' => $array[$i][1],
'Value' => $array[$i][2]
);
}
echo json_encode( $result );
如果Null
问题仍然存在,请在之前检查。
请注意 for()
循环从1开始以避免包含标头。如果你没有头,你必须从0开始循环。