Разбор JSON: нечаканы сімвал

Гэтае пытанне звязаны з папярэднім, я напісаў тут </а>.

Ці з'яўляецца гэты сінтаксіс JSON правільна? Мне трэба гэта зрабіць <�моцны> jqPlot графік пасля.

[{"Date":"2012-02-29","Close":"87.60"},{"Date":"2012-02-28","Close":"87.77"},{"Date":"2012-02-27","Close":"88.07"}]

Я пытаюся гэта таму, што я не магу выкарыстоўваць jQuery.parseJSON (jsonString); або JSON.parse (jsonString); з гэтым радком. Firefox вяртае:

<�Р> SyntaxError: JSON.parse: нечаканы сімвал @ index2.php: 677


Here is the

PHP code that generates it :

<?php
    $req = $bdd->prepare('SELECT Date, Close FROM quotes WHERE Symbol = ? AND Date > ? AND Date < ?');
    $req->execute(array($_GET['id'], $_GET['datemin'], $_GET['datemax']));

    $test=array();
    while ($donnees = $req->fetch(PDO::FETCH_ASSOC))
    {
       //echo print_r($donnees) . "
"; //echo $donnees[Date] . "
"; $test[] = $donnees; } echo json_encode($test); ?>

Я не ведаю, што гэта няправільна.



EDIT : Javascript code added.

<script>
$("button").click(function(){
    $.get("requete_graph.php", {
        id: param1,
        datemin: param2,
        datemax: param3
    }, function(data,status){
        console.log(data);
        make_graph(data);
    }, "json");
}); 

function make_graph(toto) {
    alert("String before : " + JSON.stringify(toto));
    var json_parsed = JSON.parse(toto);
    alert("String after : " + JSON.stringify(json_parsed));

    $(document).ready(function(){
        var plot1 = $.jqplot('chartdiv', json_parsed);
    });
}
</script>
2
@crush Ці выпадкова не ўжываць utf8_encode , асабліва калі дадзеныя нават не ўтрымліваюць якіх-небудзь выкарыстаннем не-ASCII сімвалаў.
дададзена аўтар deceze, крыніца
<�Код> дадзеныя і, такім чынам, таталізатар павінен быць аб'екты , а не JSON радка. Чаму вы разборы Тота ?
дададзена аўтар deceze, крыніца
@crush 1) Вы не ведаеце, у якой кадоўцы тэкст гэта, каб пачаць з, 2), калі яно не сапраўды UTF-8, json_encode не будзе кадзіраваць яго, 3) значэнні, відаць толькі дата і нумар, 4) прачытаць Што кожны праграміст Абсалютна Станоўча павінна ведаць аб кадоўках і наборы знакаў для працы з тэкставым </а>
дададзена аўтар deceze, крыніца
@crush Што азначае «PHP па змаўчанні кадоўка» азначае? І няма, json_encode <�я> не можа </я> ўшчэнт пры спробе кадзіраваць нічога, акрамя UTF-8:
дададзена аўтар deceze, крыніца
JSON мы бачым, з'яўляецца правільным. Вы ўпэўненыя, што там няма нічога больш? А вы паглядзіце на вынік у браўзэры?
дададзена аўтар Denys Séguret, крыніца
У вас ёсць "JSON" у $. Атрымаць выклік. Гэта азначае, што jQuery з'яўляецца разбор JSON для вас. <�Код> дадзеныя , і, такім чынам, Toto гэта <�я> ужо </я> аб'ект/масіў.
дададзена аўтар Rocket Hazmat, крыніца
У вас ёсць "JSON" у $. Атрымаць выклік. Гэта азначае, што jQuery з'яўляецца разбор JSON для вас. <�Код> дадзеныя , і, такім чынам, Toto гэта <�я> ужо </я> аб'ект/масіў.
дададзена аўтар Rocket Hazmat, крыніца
Вы збіраецеся мець патрэбу ў пятлі праз Тота і пабудаваць гэты масіў самастойна.
дададзена аўтар Rocket Hazmat, крыніца
Вы збіраецеся мець патрэбу ў пятлі праз Тота і пабудаваць гэты масіў самастойна.
дададзена аўтар Rocket Hazmat, крыніца
@deceze кадавання PHP па змаўчанні ISO-8859-1, а не UTF-8. <�Код> json_encode будзе на самой справе, спроба кадавання ня UTF-8. Ёсць на самай справе Q & A тут на SO, што здзелка з гэтым фактам.
дададзена аўтар crush, крыніца
@deceze я не ведаю, што яны не робяць. Там няма нічога дрэннага з кодам, які ён даў нам. Гэта відавочна на іншай мове, таму я мяркую, што ён не даў нам усё кода/высновы. Як я ўжо сказаў, я проста здымку ў цемры, улічваючы адсутнасць інфармацыі.
дададзена аўтар crush, крыніца
@deceze Дзякуй за артыкул, але змяшчае інфармацыю, якую я ўжо ведаў. Тое, што я не ведаў, што json_encode РНР пацерпіць няўдачу, калі кадзіраваць ня-UTF-8 знакаў. Я ўспомніў, няправільна яшчэ адно пытанне на SO, і думаў, што супрацьлеглае паводзіны было дакладна.
дададзена аўтар crush, крыніца
Вы, верагодна, трэба кадзіраваць як JSON $ тэст [] = utf8_encode ($ donnes); ці нешта. Я маю на ўвазе толькі што адбываецца, што вы ўвялі - я цягнуўся ...
дададзена аўтар crush, крыніца
@MarceloPascual Вы маеце рацыю, што гэта не мае сэнсу. Ён з'яўляецца абавязковым, што апрацоўшчык падзеі пасля таго, як функцыя была выкліканая, але ў той час, .ready() падзея ўжо звольнены ў любым выпадку.
дададзена аўтар crush, крыніца
Таксама @deceze php.net/manual/en/xml.encoding.php «кадаваньне крыніцы па змаўчанні, які выкарыстоўваецца PHP з'яўляецца ISO-8859-1» Што, дзе міф, здаецца, увекавечыў з, але, як вы можаце бачыць, гэта толькі мае справу з XML-дакументамі.
дададзена аўтар crush, крыніца
Пакажыце нам, што JSON.parse тэлефануйце! Ваш JSON, здаецца, сапраўды, можа быць, вы нечакана нават рэха некаторых іншых персанажаў вакол яго.
дададзена аўтар Bergi, крыніца
Верагодна, не звязаныя паміж сабой, але ... чаму ў вас ёсць $ (дакумент) .ready (функцыя() {...} ўнутры функцыі ??
дададзена аўтар Marcelo Pascual, крыніца
Пераканайцеся, што ні вашых PHP файлы маюць парадак байтаў знакаў. jQuery parsejson праца на ўсіх servers"> stackoverflow.com/ пытанні/4740973/& hellip; PHP "> stackoverflow.com/questions/8028957/headers-already-sent-by-‌ PHP
дададзена аўтар PleaseStand, крыніца
яна сапраўдная. У будучыні разгледзець пытанне аб выкарыстанні jsonlint.com , каб праверыць. Аднак гэта будзе толькі распазнавальнымі, калі яго прайшло як яваскрипт радка.
дададзена аўтар Ben McCormick, крыніца
Я згодны з Берг, паказаць нам код вакол JSON.parse / jQuery.parseJSON . Я падазраю, што вы здабывання гэтага ў выклік AJAX, які jQuery будзе дэшыфраваць для вас - не трэба выклікаць сінтаксічнага аналізу ўручную.
дададзена аўтар Izkata, крыніца
ДОБРА. Але я не разумею, як я магу пераўтварыць гэты масіў у радок. <�Код> абвесткі (Toto) вяртае [аб'ект Object], [аб'ект Object], [аб'ект Object] . І абвесткі (JSON.stringify (Тота)) вяртае фармат JSON ( [{ "Дата": "2012-02-29", "Зачыніць": "87,60"}, { » дата ":" 2012-02-28 "і ZWNJ," Зачыніць ":" 87,77 "}, {" & ZWNJ; дата ":" 2012-02-27 "," & ZWNJ; Зачыніць ":" 88,07 "} ] ). Што я павінен зрабіць, каб зрабіць радок, як гэта [[[ '2012-02-29', 87,60], [ '2012-02-28', 87,77], [ '2012-02-27', 88,07]]] ?
дададзена аўтар pihug12, крыніца
ДОБРА. Але я не разумею, як я магу пераўтварыць гэты масіў у радок. <�Код> абвесткі (Toto) вяртае [аб'ект Object], [аб'ект Object], [аб'ект Object] . І абвесткі (JSON.stringify (Тота)) вяртае фармат JSON ( [{ "Дата": "2012-02-29", "Зачыніць": "87,60"}, { » дата ":" 2012-02-28 "і ZWNJ," Зачыніць ":" 87,77 "}, {" & ZWNJ; дата ":" 2012-02-27 "," & ZWNJ; Зачыніць ":" 88,07 "} ] ). Што я павінен зрабіць, каб зрабіць радок, як гэта [[[ '2012-02-29', 87,60], [ '2012-02-28', 87,77], [ '2012-02-27', 88,07]]] ?
дададзена аўтар pihug12, крыніца
ДОБРА. Але я не разумею, як я магу пераўтварыць гэты масіў у радок. <�Код> абвесткі (Toto) вяртае [аб'ект Object], [аб'ект Object], [аб'ект Object] . І абвесткі (JSON.stringify (Тота)) вяртае фармат JSON ( [{ "Дата": "2012-02-29", "Зачыніць": "87,60"}, { » дата ":" 2012-02-28 "і ZWNJ," Зачыніць ":" 87,77 "}, {" & ZWNJ; дата ":" 2012-02-27 "," & ZWNJ; Зачыніць ":" 88,07 "} ] ). Што я павінен зрабіць, каб зрабіць радок, як гэта [[[ '2012-02-29', 87,60], [ '2012-02-28', 87,77], [ '2012-02-27', 88,07]]] ?
дададзена аўтар pihug12, крыніца
@deceze: Я хацеў зрабіць гэта, таму што мне патрэбна радок, як, што [[[ '2012-02-29', 87,60], [ '2012-02-28', 87,77], [ '2012-02- 27 ', 88,07]]] выкарыстоўваць jqPlot. Я не ўпэўнены, як гэта зрабіць. @MarceloPascual: Я не быў упэўнены, што гэта было карысна ці не, я буду выдаляць яго.
дададзена аўтар pihug12, крыніца
@deceze: Я хацеў зрабіць гэта, таму што мне патрэбна радок, як, што [[[ '2012-02-29', 87,60], [ '2012-02-28', 87,77], [ '2012-02- 27 ', 88,07]]] выкарыстоўваць jqPlot. Я не ўпэўнены, як гэта зрабіць. @MarceloPascual: Я не быў упэўнены, што гэта было карысна ці не, я буду выдаляць яго.
дададзена аўтар pihug12, крыніца
Я дадаў код JavaScript. Мае PHP файлы ў кадоўцы UTF-8 Кадаваць. Я не ведаю, калі гэта звязана.
дададзена аўтар pihug12, крыніца

7 адказы

jQuery.get, given the right dataType parameter (which you did) or a content-type header, does already parse the JSON for you. Your callback function receives an array as the data parameter, not a string.

<�Папярэдне> вар json_parsed = JSON.parse (таталізатар);

затым выдасць памылку як Тота не з'яўляецца радком JSON (ваш FF здаецца, .ToString() масіва, а затым сустракае і недапушчальны знак). Замест гэтага, проста выкарыстоўваць

function make_graph(toto) {
    console.log(typeof toto, toto);
    alert("String before : " + JSON.stringify(toto));
    var json_parsed = toto;//or just use `toto` everywhere

    $(document).ready(function(){
        var plot1 = $.jqplot('chartdiv', json_parsed);
    });
}
0
дададзена

jQuery.get, given the right dataType parameter (which you did) or a content-type header, does already parse the JSON for you. Your callback function receives an array as the data parameter, not a string.

<�Папярэдне> вар json_parsed = JSON.parse (таталізатар);

затым выдасць памылку як Тота не з'яўляецца радком JSON (ваш FF здаецца, .ToString() масіва, а затым сустракае і недапушчальны знак). Замест гэтага, проста выкарыстоўваць

function make_graph(toto) {
    console.log(typeof toto, toto);
    alert("String before : " + JSON.stringify(toto));
    var json_parsed = toto;//or just use `toto` everywhere

    $(document).ready(function(){
        var plot1 = $.jqplot('chartdiv', json_parsed);
    });
}
0
дададзена

jQuery.get, given the right dataType parameter (which you did) or a content-type header, does already parse the JSON for you. Your callback function receives an array as the data parameter, not a string.

<�Папярэдне> вар json_parsed = JSON.parse (таталізатар);

затым выдасць памылку як Тота не з'яўляецца радком JSON (ваш FF здаецца, .ToString() масіва, а затым сустракае і недапушчальны знак). Замест гэтага, проста выкарыстоўваць

function make_graph(toto) {
    console.log(typeof toto, toto);
    alert("String before : " + JSON.stringify(toto));
    var json_parsed = toto;//or just use `toto` everywhere

    $(document).ready(function(){
        var plot1 = $.jqplot('chartdiv', json_parsed);
    });
}
0
дададзена

У верхняй частцы PHP скрыпт, дадайце:

header('Content-type: text/json; charset=utf-8');

Калі вы не маеце яго, то сервер будзе пасылаць яго як звычайны тэкст, і ваш браўзэр не будзе ведаць, што гэта радок JSON.

0
дададзена
Акрамя таго, я не думаю, што гэта вырашыць праблему Ора ст. Каментар, @deceze прапанаваў вышэй пытанне.
дададзена аўтар crush, крыніца
Я аддаю перавагу прыкладання/JSON сам.
дададзена аўтар crush, крыніца
@crush твая праўда :)
дададзена аўтар Marcelo Pascual, крыніца

The JSON is indeed valid (you can check it at jsonlint.com

Ваша праблема можа быць з-за якія ўзнікаюць дадатковых знакаў не прабельных адпраўляецца пасля JSON (напрыклад: PHP памылак/папярэджанняў). Добры спосаб, каб гарантаваць, што нічога іншага выводзіцца пасля JSON выкарыстоўваецца ў PHP памерці функцыю, каб адправіць змесціва затым спыніць выкананне.

die(json_encode($test));

// OR
echo json_encode($test);
die();
0
дададзена
Я не бачу якія-небудзь дадатковыя сімвалы адпраўляюцца пасля таго, як JSON з'яўляецца echo'd. Я бачу, што зачыняе тэг PHP, які не трэба быць там, але дадатковыя пробельные ня анулюе яго JSON.
дададзена аўтар crush, крыніца
@crush я меў на ўвазе дадатковыя біт, як памылкі PHP або папярэджання - я буду абнаўляць мой адказ ўдакладніць.
дададзена аўтар iblamefish, крыніца

The JSON is indeed valid (you can check it at jsonlint.com

Ваша праблема можа быць з-за якія ўзнікаюць дадатковых знакаў не прабельных адпраўляецца пасля JSON (напрыклад: PHP памылак/папярэджанняў). Добры спосаб, каб гарантаваць, што нічога іншага выводзіцца пасля JSON выкарыстоўваецца ў PHP памерці функцыю, каб адправіць змесціва затым спыніць выкананне.

die(json_encode($test));

// OR
echo json_encode($test);
die();
0
дададзена
Я не бачу якія-небудзь дадатковыя сімвалы адпраўляюцца пасля таго, як JSON з'яўляецца echo'd. Я бачу, што зачыняе тэг PHP, які не трэба быць там, але дадатковыя пробельные ня анулюе яго JSON.
дададзена аўтар crush, крыніца
@crush я меў на ўвазе дадатковыя біт, як памылкі PHP або папярэджання - я буду абнаўляць мой адказ ўдакладніць.
дададзена аўтар iblamefish, крыніца

The JSON is indeed valid (you can check it at jsonlint.com

Ваша праблема можа быць з-за якія ўзнікаюць дадатковых знакаў не прабельных адпраўляецца пасля JSON (напрыклад: PHP памылак/папярэджанняў). Добры спосаб, каб гарантаваць, што нічога іншага выводзіцца пасля JSON выкарыстоўваецца ў PHP памерці функцыю, каб адправіць змесціва затым спыніць выкананне.

die(json_encode($test));

// OR
echo json_encode($test);
die();
0
дададзена
Я не бачу якія-небудзь дадатковыя сімвалы адпраўляюцца пасля таго, як JSON з'яўляецца echo'd. Я бачу, што зачыняе тэг PHP, які не трэба быць там, але дадатковыя пробельные ня анулюе яго JSON.
дададзена аўтар crush, крыніца
@crush я меў на ўвазе дадатковыя біт, як памылкі PHP або папярэджання - я буду абнаўляць мой адказ ўдакладніць.
дададзена аўтар iblamefish, крыніца