您好我是php的新手,想要通过php将json-jart-object作为.csv文件存储。
我有一个JSON-Object,在名为Logger.json的文件中定义:
{
"Name": "Dummy",
"Uhrzeit": "1234",
"Speed": "100",
"Level": "11",
"Szenen": {
}
}
通过$ .getJson读取文件后,我向对象添加了一些属性。 Logger.php现在接收内容(首先它一直是空的,因为我最后错过了json_decode($_POST['data'], true);
布尔值true),但是存储的.csv只包含(“Array,Array”)。
我还尝试了其他内容类型,只发送jsonText(没有data =)或对象obj本身。任何想法为什么它不起作用?谢谢!
$.getJSON('xml/Logger.json', function(obj) {
//add new scene:
obj.Szenen["144"] = {};
obj.Szenen["144"]["happy"] = {};
obj.Szenen["144"]["happy"].type = "right";
obj.Szenen["144"]["happy"].collected = "0";
obj.Szenen["144"]["sad"] = {};
obj.Szenen["144"]["sad"].type = "false";
obj.Szenen["144"]["sad"].collected = "0";
obj.Szenen["144"]["angry"] = {};
obj.Szenen["144"]["angry"].type = "false";
obj.Szenen["144"]["angry"].collected = "0";
obj.Szenen["200"] = {};
obj.Szenen["200"]["happy"] = {};
obj.Szenen["200"]["happy"].type = "right";
console.log(obj);
var jsonText = JSON.stringify(obj);
var request= new XMLHttpRequest();
request.open("POST", "http://localhost/logger.php")
request.setRequestHeader("Content-type", "application/x-www-form-urlencoded", true)
var data = "data="+jsonText;
request.send(data);
我的logger.php看起来像这样:
<?php
$values = json_decode($_POST['data'], true);
store($values);
function store($data) {
$file = 'logs/UserLogging';
$filename = $file."_".date("d-m-Y_H-i",time()).".csv";
$fp = fopen($filename, 'w');
foreach($data as $line){
//$val = explode(",",$line);
fputcsv($fp, $line);
}
fclose($fp);
}
?>
编辑: .csv应该看起来像这样(但是如果像“Name”或“Uhrzeit”这样的键也出现在输出中,那将是完美的):
Dummy,1234,100,11;
144,happy,right,0,sad,false,0,angry,false,0;
200,happy,right ...
答案 0 :(得分:1)
你的fputcsv syntax不正确 - 参数2必须是一个数组(它会被分解为以逗号分隔的值)。
例如,fputcsv([a,b,c])
会将a,b,c
写入文件后跟换行符。
您只需将JSON解码的对象转换为数组即可。如果不知道你想要的格式,这里有一个简单的例子:
...(在函数store
中)...
$fp = fopen($filename, 'w');
fputcsv($fp, (array)$data);
fclose($fp);
存储顶级密钥的CSV。