使用Javascript和PHP将JSON存储为CSV

时间:2013-09-20 13:31:26

标签: javascript php json csv

您好我是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 ...

1 个答案:

答案 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。