1

我想通过 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
}

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

4

2 回答 2

1

显然,您必须首先utf8_encode也在这里)这些值,因为 PHP 的字符串是 ISO-8859-1。

所以,

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

应该成为

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

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

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

于 2013-02-20T13:54:01.360 回答
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"
    }
}

你看到字符不一样了吗?čokolvek nieč aké taký != okolvek nieè aké 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);

    });
于 2013-02-20T16:50:58.757 回答