最新消息:

标准JSON格式和通过淘宝IP地址库获取IP位置

PHP admin 1474浏览 0评论

前些日子,写了一个项目需要用到JSON,当时查找了N多资料才有了些许我线索,为了利人利已,特此记录下来。(该项目为NET).总的来说,JSON数据是AJAX用来传递序列化对象的一种数据格式,其关键符号就是{}、[]、””、:、,几种,不能出现”,否则是不认识的。

{}里面的是一个对象,如果是多个对象,则用逗号间隔,即{},{},这样就组成了一个对象序列,为了辨别开始和结束,则需要加上[]才能进行传递,则实际传递的形式应该是[{},{}],如果只要传递一个对象,则{}的形式就可以了。接下来就是对象属性的表现方式了,属性必须在””里面,属性与值之间用:隔开,属性之间用,来分隔,如果属性的值为数组,则用[]包括起来,这样实际传递的数据格式可能有:

1、{“属性1″:值1,”属性2”:值2},如果值为字符串,则也需要用””括起来(下同)。

2、{“属性1″:值1,”属性2”:[值1,值2]},其中属性2是一个数组,包含了值1和值2。

3、{“属性1″:值1,”属性2”:{“属性a”:值a,”属性b”:[值b,值c]}},这个比较复杂了,属性2是个对象,这个对象由包含属性a和属性b,属性b又是一个数组包含值b和值c。我想这些应该是最基本了,其余的就是在此基础上的拓展而已。

实际中,要序列化对象,在.net中只要调用Newtonsoft.Json.JavaConvert.SerializeObject();函数即可,但了解JSON数据的格式标准

能更好的判断为题所在,同时能方便的按照自己的要求组成json数据。

转自:http://blog.csai.cn/user1/14586/archives/2011/46103.html

—————————————————————————————————————————————————–

举个例子:淘宝的IP地址库访问时返回的就是JSON格式(http://ip.taobao.com/instructions.php):

20130801210303

{“code”:0,”data”:{“ip”:”210.75.225.254″,”country”:”\u4e2d\u56fd”,”area”:”\u534e\u5317″,
“region”:”\u5317\u4eac\u5e02″,”city”:”\u5317\u4eac\u5e02″,”county”:””,”isp”:”\u7535\u4fe1″,
“country_id”:”86″,”area_id”:”100000″,”region_id”:”110000″,”city_id”:”110000″,
“county_id”:”-1″,”isp_id”:”100017″}}

可以看出,返回的结果是一个JSON对象,所以不用[]包围(当多个JSON对象时需要用[]包围)。该JSON对象有属性code和data,其中data属性的值是一个JSON对象,所以用{}包围了。淘宝IP地址库返回的ISON对象格式就是上面介绍的第三种情况。

——————————————————————————————————————————————–

python通过淘宝IP地址库获取IP位置

从上面的介绍可以看出淘宝的IP地址库返回的数据是JSON格式的数据,因此要使用python来获取IP地址信息需要分为两步:

1、构造url,并获取返回的数据。使用urllib2或urllib模块

2、解析返回的json信息。使用json模块。

当然,如果在程序中加入判断输入的ip地址是否合法的代码,需要使用re模块。

具体代码如下:

#coding=utf-8

import urllib
import json

def getip(ip):
	try:
		url = "http://ip.taobao.com/service/getIpInfo.php?ip="+ip
		ret = urllib.urlopen(url)
	except Exception,e:
		print "error:",e
		return
	data = ret.read()
	#下面解析数据
	info = json.loads(data)
	if 'code' in info:
		if info['code'] == 0:
			print "ip:",info['data']['ip']
			print "country:",info['data']['country']
			print "area:",info['data']['area']
			print "region:",info['data']['area']
			print "city:",info['data']['region']
			print "county:",info['data']['county']
			print "isp:",info['data']['isp']
		else:
			print "get info failed"
	else:
		print "error"

if __name__ == "__main__":
	ip = raw_input("please enter IP:")
	getip(ip)

 

php利用淘宝ip库获得用户ip地理位置

php利用淘宝的ip接口,用来获取用户的地理位置,脚本如下:

/**
* 获取用户真实 IP
*/
function getIP()
{
static $realip;
if (isset($_SERVER)){
if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])){
$realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
} else if (isset($_SERVER["HTTP_CLIENT_IP"])) {
$realip = $_SERVER["HTTP_CLIENT_IP"];
} else {
$realip = $_SERVER["REMOTE_ADDR"];
}
} else {
if (getenv("HTTP_X_FORWARDED_FOR")){
$realip = getenv("HTTP_X_FORWARDED_FOR");
} else if (getenv("HTTP_CLIENT_IP")) {
$realip = getenv("HTTP_CLIENT_IP");
} else {
$realip = getenv("REMOTE_ADDR");
}
}

return $realip;
}

/**
* 获取 IP  地理位置
* 淘宝IP接口
* @Return: array
*/
function getCity($ip)
{
$url="http://ip.taobao.com/service/getIpInfo.php?ip=".$ip;
$ip=json_decode(file_get_contents($url));
if((string)$ip->code=='1'){
return false;
}
$data = (array)$ip->data;
return $data;
}

 

 

参考文献:

1、http://www.myhack58.com/Article/html/3/68/2012/35392.htm

2、http://www.odayou.com/admin-2007.html

3.Json概述以及python对json的相关操作

4、python中json格式数据的编码和解码 http://www.01happy.com/python-json-encode-and-decode/

转载请注明:jinglingshu的博客 » 标准JSON格式和通过淘宝IP地址库获取IP位置


Warning: Use of undefined constant PRC - assumed 'PRC' (this will throw an Error in a future version of PHP) in /usr/share/nginx/html/wp-content/themes/d8/comments.php on line 17
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址