通过php解散字符,null / csv到json文件

时间:2013-02-20 13:36:13

标签: php arrays json csv fgetcsv

我想通过php读取csv文件,然后将数组保存在json文件中。

 $fp = fopen('images/thermo.csv','r') or die("**! can't open file\n\n");
    setlocale(LC_ALL, 'sk_SK.UTF-8');
    $i = 0;
    while($csv_line = fgetcsv($fp,10024,';')) {
        $i++;
        $json[$i]['nazov'] = $csv_line[0];
        $json[$i]['popis'] = $csv_line[1];
        $json[$i]['cena'] = $csv_line[2];
            $json[$i]['img'] = $csv_line[3];
         $json[$i]['mnozstvo'] = $csv_line[4];
    }
    $json['total_lines'] = $i;
    //print json_encode($json);

    fclose($fp) or die("**! can't close file\n\n");

    $fn = fopen('cennik.json', 'w');
    fwrite($fn, json_encode($json));
    fclose($fn);

.csv文件是

Murovacia tvarnica 25 a;?;15,4;img2.jpg;m2
Murovacia tvárnica 35;á;23,1;img1.jpg;m2
Murovacia tvárnica 44;helo test;31,9;img3.jpg;m2

json文件有效,但它包含“null”..或“”(空)而不是“á”

{
    "1": {
        "nazov": "Murovacia tvarnica 25 a",
        "popis": "?",
        "cena": "15,4",
        "img": "img2.jpg",
        "mnozstvo": "m2"
    },
    "2": {
        "nazov": null,
        "popis": "",
        "cena": "23,1",
        "img": "img1.jpg",
        "mnozstvo": "m2"
    },
    "3": {
        "nazov": null,
        "popis": "helo test",
        "cena": "31,9",
        "img": "img3.jpg",
        "mnozstvo": "m2"
    },
    "total_lines": 3
}

有人可以解释一下我做错了什么吗?谢谢

2 个答案:

答案 0 :(得分:1)

显然,您必须首先utf8_encodealso here)值,因为PHP的字符串是ISO-8859-1。

所以,

$json[$i]['nazov'] = $csv_line[0];

应该成为

$json[$i]['nazov'] = utf8_encode($csv_line[0]);

您还应编码任何其他可能包含UTF-8字符的字符串。

当在任何环境中从JSON中检索值时,您可能需要utf8_decode

答案 1 :(得分:0)

@crush 所以这就是.csv

Murovacia tvárnica 25;čokolvek nieč aké taký;15,4;img2.jpg;m2
Murovacia tvárnica 35;čokolvek nieč aké taký;23,1;img1.jpg;m2
Murovacia tvárnica 44;čokolvek nieč aké taký;31,9;img3.jpg;m2
Prekladová tvárnica 25;čokolvek nieč aké taký;3,85;;bm
Prekladová tvárnica 35;čokolvek nieč aké taký;5,91;;bm
Prekladová tvárnica 44;čokolvek nieč aké taký;8,8;;bm
Vencová tvárnica 25;čokolvek nieč aké taký;3,3;;bm
Vencová tvárnica 35;čokolvek nieč aké taký;5,5;;bm
Vencová tvárnica 44;čokolvek nieč aké taký;8,25;;bm
Koncový diel;čokolvek nieč aké taký;0,33;;ks

json文件(通过JSONLINT)是:

{
    "1": {
        "nazov": "Murovacia tvárnica 25",
        "popis": "okolvek nieè aké taký",
        "cena": "15,4",
        "img": "img2.jpg",
        "mnozstvo": "m2"
    },
    "2": {
        "nazov": "Murovacia tvárnica 35",
        "popis": "okolvek nieè aké taký",
        "cena": "23,1",
        "img": "img1.jpg",
        "mnozstvo": "m2"
    },
    "3": {
        "nazov": "Murovacia tvárnica 44",
        "popis": "okolvek nieè aké taký",
        "cena": "31,9",
        "img": "img3.jpg",
        "mnozstvo": "m2"
    },
    "4": {
        "nazov": "Prekladová tvárnica 25",
        "popis": "okolvek nieè aké taký",
        "cena": "3,85",
        "img": "",
        "mnozstvo": "bm"
    },
    "5": {
        "nazov": "Prekladová tvárnica 35",
        "popis": "okolvek nieè aké taký",
        "cena": "5,91",
        "img": "",
        "mnozstvo": "bm"
    },
    "6": {
        "nazov": "Prekladová tvárnica 44",
        "popis": "okolvek nieè aké taký",
        "cena": "8,8",
        "img": "",
        "mnozstvo": "bm"
    },
    "7": {
        "nazov": "Vencová tvárnica 25",
        "popis": "okolvek nieè aké taký",
        "cena": "3,3",
        "img": "",
        "mnozstvo": "bm"
    },
    "8": {
        "nazov": "Vencová tvárnica 35",
        "popis": "okolvek nieè aké taký",
        "cena": "5,5",
        "img": "",
        "mnozstvo": "bm"
    },
    "9": {
        "nazov": "Vencová tvárnica 44",
        "popis": "okolvek nieè aké taký",
        "cena": "8,25",
        "img": "",
        "mnozstvo": "bm"
    },
    "10": {
        "nazov": "Koncový diel",
        "popis": "okolvek nieè aké taký",
        "cena": "0,33",
        "img": "",
        "mnozstvo": "ks"
    }
}

你看到那些字符不一样吗? čokolvekniečakétahý!=okolveknieètakétaký...

php是一样的:

$fp = fopen('images/thermo.csv','r') or die("**! can't open file\n\n");

$i = 0;
while($csv_line = fgetcsv($fp,10024,';')) {
    $i++;
    $json[$i]['nazov'] = utf8_encode($csv_line[0]);
    $json[$i]['popis'] = utf8_encode($csv_line[1]);
    $json[$i]['cena'] = $csv_line[2];
        $json[$i]['img'] = $csv_line[3];
     $json[$i]['mnozstvo'] = $csv_line[4];
}

fclose($fp) or die("**! can't close file\n\n");

$fn = fopen('cennik.json', 'w');
fwrite($fn, json_encode($json));
fclose($fn);

jQuery .getJSON是:

jQuery.getJSON( "web_beta/cennik.json" , function(data){
    var myBoxes = ''
        jQuery.each(data,function(key,value){

            var priceDPH = parseFloat(parseFloat(value.cena) * 1.2).toFixed(2);
            myBoxes += '<div id="no_'+key+'" class="box"> <div class="pic">'
            myBoxes += '<a href="web_beta/images/thermoimg/type'+key+'/'+value.img+'" id="mb'+key+'" class="s5mb" title="'+value.nazov+'">'
            myBoxes += '<img src="web_beta/images/thermoimg/type'+key+'/'+value.img+'" width="45%" class="boxed" alt="" />'
            myBoxes += '</a></div>'
            myBoxes += '<h3>'+value.nazov+'</h3><p class="description">'+value.popis+'</p>'
            myBoxes += '<input type="text" id="name_'+key+'" class="boxin" value="0"><p class="thePrice">Cena: <span class="price">'+priceDPH+'</span> €/'+value.mnozstvo+'(s DPH)'
            myBoxes += '</p> <span class="send">Pridať do zoznamu<strong>+</strong></span></div>'
            var divider = parseFloat( key / 2 );
            if( (divider - parseInt(divider)) == 0 ) {

                myBoxes += '<div class="new"></div>'

            }

        });
    jQuery('#bigbox').children().remove();
        jQuery('#bigbox').append(myBoxes);

    });