因为平时老是接触它,但是又不是很了解,所以整理一下
关于json的格式
<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title> 标题 </title>
</head>
<body>
<script type="text/javascript">
//定义一个json 相当于定义了一个对象名 以及 它的属性
// { 键值对, 键值对 }
var json1 = { 'key1':123 , 'key2':'stringvvv' } ;
document.write( json1.key1 + "<br>" );
document.write( json1.key2 + "<br>" );
</script>
<br>----------------------------------<br>
<script type="text/javascript">
//键值对中, 值不仅仅可以是数字或字符串, 还可以是另一个json
var json2 = { 'key1':123, 'key2':{ 'key21':12312, 'key22':'sssss' } };
document.write( json2.key1 + "<br>" );
document.write( json2.key2 + "<br>" );
document.write( json2.key2.key21 + "<br>" );
document.write( json2.key2.key22 + "<br>" );
</script>
<br>----------------------------------<br>
<script type="text/javascript">
//键值对中, 值不仅仅可以是数字或字符串或json, 还可以是一个json数组,用[]包起来
var json3 = { 'key1':123, 'key2':{ 'key21':12312, 'key22':'sssss' },
'key3':[ {'key33':123,'key44':456 },
{'key33':123,'key44':456},
{'key33':123,'key44':456}
]
};
document.write( json3.key3[0] + "<br>" );
document.write( json3.key3[0].key33 + "<br>" );
document.write( json3.key3[0].key44 + "<br>" );
document.write( json3.key3[1] );
</script>
</body>
</html>
如何用Javascript获取远程json
情况1:
以股票行情接口为例
如果要获得 http://hq.sinajs.cn/rn=61fdj&format=text&list=stock_sh_up_5min_20 输出的数据
打开链接,可以看到输出的是 stock_sh_up_5min_20 = ...
也就是说服务器返回的是一段js代码,所以我们在本地建立一个<script></script>,并把src等于上面的这个链接,像这样:
<script src="http://hq.sinajs.cn/rn=61fdj&format=text&list=stock_sh_up_5min_20" language="javascript"></script>
那么就相当于得到了里面的数据(虽然里面的变量不是我们定义的,但是加了这段script,就相当于我们定义了这些变量,脚本里也多了这些变量),然后就可以使用它们了,像这样:
<script language="javascript">alert(stock_sh_up_5min_20[0].symbol)</script>
类似的,还有这个
<script type="text/javascript" src="http://hq.sinajs.cn/list=sh601006" charset="gb2312"></script>
<script type="text/javascript">
var elements=hq_str_sh601006.split(",");
document.write("current price:"+elements[3]);
</script>
情况2:
情况1中由于服务器已经插入了 var 变量 = xxxx , 所以可以直接操作变量
而对于这种 https://data.btcchina.com/data/ticker?market=btccny 输出的是标准的json格式
{
"ticker": {
"high": "2894.97",
"low": "2850.08",
"buy": "2876.92",
"sell": "2883.80",
"last": "2875.66",
"vol": "4133.63800000",
"date": 1396412995
}
}
可以使用 jquery为我们提供的跨域获取json的getJSON()函数
<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title> 标题 </title>
<script type="text/javascript" src="js/jquery-1.9.1.min.js"></script>
</head>
<body>
<script type="text/javascript">
var url = "https://data.btcchina.com/data/ticker?market=btccny";
$.getJSON( url, function(data){
document.write( data + "<br>" );
document.write( data.ticker + "<br>" );
document.write( data.ticker.high + "<br>" );
document.write( data.ticker.sell + "<br>" );
} );
</script>
</body>
</html>
情况3:
这个链接 http://q.stock.sohu.com/app1/stockSearch?method=search&callback=searchBox.output&type=all&keyword=60
返回的是一个js代码,开头的searchBox.output是一个回调函数,我们可以通过修改callback参数来自定义我们的回调函数
http://q.stock.sohu.com/app1/stockSearch?method=search&callback=output&type=all&keyword=60
根据返回的数据格式,我们先定义好一个函数
function output(json) { alert(json.result) }
然后用<script></script>的src把上面的网址引进去,同时js为我们提供了createElement()方法 可以动态创建一个<script></script>
最后代码如下:
//输出远程传回来的股票代码 输入提示
function output(json) {
var result = json.result;
//for( var row in result) {
$('.codesuggest').html( result.toString() );
//}
}
//根据src创建相应的script
function addScriptTag(src){
var script = document.createElement('script');
script.setAttribute("type","text/javascript");
script.src = src;
document.body.appendChild(script);
}
//输入框输入股票代码,把代码加进src
$('.codesearch').keyup(function(){
var src = $(this).val().toString();
if( src.length ) {
src = "http://q.stock.sohu.com/app1/stockSearch?method=search&callback=output&type=cnsi&keyword=" + src;
addScriptTag(src);
}
});
情况4:
让我头疼了很久,是一个 [] 包起来的json数组
尚未解决,求指导