我想通过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
}
有人可以解释一下我做错了什么吗?谢谢
答案 0 :(得分:1)
显然,您必须首先utf8_encode
(also 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);
});