HTML 5 SSE和Json - Json到数组(javascript)


HTML 5 SSE and Json - Json to array (javascript)

查看下面的更新,主题关闭

我是新的服务器发送的事件,还没有在Javascript中使用Json(只有php)。我试图从每个对象获得数据,但它不会工作。foreach循环也可以

这是我读取Json的脚本:

<script>
if(typeof(EventSource) !== "undefined") {
    var source = new EventSource("json.php");
    source.onmessage = function(event) {
        var b = event.data.replace(/'/g, '"');
        var obj = JSON.parse(b);
        console.log(obj.AUDCAD.Bid);
    };
} else {
    document.getElementById("result").innerHTML = "Sorry, your browser does not support server-sent events...";
}
</script>

Javascript中收到的输出(event.data):

{ 'AUDCAD':[{'Bid':'0.92599', 'Color':'#9F0226', 'Proc':'+0.23%'}]}
{ 'AUDJPY':[{'Bid':'85.24575', 'Color':'#00652B', 'Proc':'-0.66%'}]}
{ 'AUDNZD':[{'Bid':'1.090025', 'Color':'#00652B', 'Proc':'+0.24%'}]}
{ 'AUDUSD':[{'Bid':'0.7078', 'Color':'#00652B', 'Proc':'-0.32%'}]}
{ 'CADJPY':[{'Bid':'91.97097', 'Color':'#00652B', 'Proc':'-0.82%'}]}
{ 'EURAUD':[{'Bid':'1.5778', 'Color':'#00652B', 'Proc':'+0.82%'}]}
{ 'EURCAD':[{'Bid':'1.4633', 'Color':'#9F0226', 'Proc':'+0.89%'}]}
{ 'EURCHF':[{'Bid':'1.09118', 'Color':'#9F0226', 'Proc':'-0.07%'}]}
{ 'EURCZK':[{'Bid':'27.0235', 'Color':'#9F0226', 'Proc':'+0.58%'}]}
{ 'EURGBP':[{'Bid':'0.738611', 'Color':'#9F0226', 'Proc':'+0.04%'}]}
{ 'EURJPY':[{'Bid':'134.6803', 'Color':'#9F0226', 'Proc':'-0.01%'}]}
{ 'EURUSD':[{'Bid':'1.1185', 'Color':'#9F0226', 'Proc':'+0.34%'}]}
{ 'GBPJPY':[{'Bid':'182.2945', 'Color':'#9F0226', 'Proc':'+0.01%'}]}
{ 'GBPUSD':[{'Bid':'1.5142', 'Color':'#00652B', 'Proc':'+0.34%'}]}
{ 'NZDUSD':[{'Bid':'0.6488', 'Color':'#9F0226', 'Proc':'-0.65%'}]}
{ 'USDCAD':[{'Bid':'1.3084', 'Color':'#00652B', 'Proc':'+0.54%'}]}
{ 'USDCHF':[{'Bid':'0.9754', 'Color':'#00652B', 'Proc':'-0.39%'}]}
{ 'USDJPY':[{'Bid':'120.39', 'Color':'#00652B', 'Proc':'-0.33%'}]}

由于错误,我在第5行用双引号替换了单引号。

我不确定我是否以正确的方式创建了Json,我只是在php中读取xml文件并为其创建了Json。

      <?php //here runs a loop
        { 
echo"data: { '".$v->Symbol."':[{'Bid':'".$v->Bid."', 'Color':'".$cc."', 'Proc':'".$sign.$p."'}]}'n'n"; }
     echo "retry: 10000'n'n"; ?>

我希望有人能帮助我,无论如何提前感谢

我现在正在使用这个,这就是我所需要的

<script>
if(typeof(EventSource) !== "undefined") {
    var source = new EventSource("json.php");
    source.onmessage = function(event) {
        var b = event.data.replace(/'/g, '"');
        var obj = JSON.parse(b);        
    for(var key in obj){
        console.log(key+' Bid:'+obj[key].Bid+' Color:'+obj[key].Color+' Proc:'+obj[key].Proc);
    }    };
} else {
    document.getElementById("result").innerHTML = "Sorry, your browser does not support server-sent events...";
}
</script>
PHP

echo"data: { '".$v->Symbol."':{'Bid':'".$v->Bid."', 'Color':'".$cc."', 'Proc':'".$sign.$p."'}}'n'n";

试试这个:

Object.keys(obj).forEach(function(key) {
    tmp = obj[key][0];
    Object.keys(tmp).forEach(function(k) {
        console.log(k + ':' + tmp[k]);
    }); 
});

你将遍历你收到的任何格式的数据

你好你的"AUDCAD"对象是数组在数组中你已经添加了对象所以你需要通过使用

来获取它
obj['AUDCAD'][0]['Bid'];
{ 'AUDCAD':[{'Bid':

这不是JSON,会导致JSON.parse出错。JSON中的字符串必须用"分隔。'是不可接受的。参见http://jsonlint.com/

在第5行我用双引号替换了单引号,因为有错误

从源头修复问题。不要在最后一刻才动手。您将遇到数据包含'"作为实际数据的问题。

我不确定我是否以正确的方式创建了Json

不要通过混搭字符串来生成JSON。你会犯错误的。

使用数组等生成合适的PHP数据结构。然后通过json_encode

obj.AUDCAD.Bid

AUDCAD是一个对象数组,而不是单个对象。

您需要在obj.AUDCAD[0].Bid

的行中添加更多内容

如果您想使用obj.AUDCAD.Bid访问您的数据,请更改php代码

echo"data: { '".$v->Symbol."':{'Bid':'".$v->Bid."', 'Color':'".$cc."', 'Proc':'".$sign.$p."'}}'n'n"; }

(没有[]),否则你必须用obj.AUDCAD[0].Bid访问它,因为obj.AUDCAD是一个数组,里面有1个对象。

现在,要访问所有的数据,尝试一个for循环,像这样:

for(var key in obj)
    console.log(obj[key].Bid)