求一个解析以下内容的Nodejs JS代码
求一个解析以下内容的Nodejs JS代码
http://api.dangqian.com/apidiqu2/api.asp?format=json&callback=wjr&id=000000000000
返回数据
wjr({ “is_login”:1, “site”:“中国行政区划api”, “url”:“http://api.dangqian.com/apidiqu2/”, “jieshao”:“省市县乡村五级行政区划地址信息库”, “idengji”:“1”, “idiming”:“中国”, “idaima”:“000000000000”, “diming1”:“中国”, “daima1”:“000000000000”, “diming2”:"", “daima2”:"", “diming3”:"", “daima3”:"", “diming4”:"", “daima4”:"", “diming5”:"", “daima5”:"", “diming6”:"", “daima6”:"", “zidi”:34, “banben”:“2011”, “zhizao”:“王建然”, “qq”:“250247045”, “riqi”:“2012-12-23 22:06:49”, “shike”:“2013-1-3 22:31:24”, “id”:“35”, “list”:{ “wjr1”:{“dengji”:“2”,“diming”:“北京市”,“daima”:“110000000000”,“zidi”:2}, “wjr2”:{“dengji”:“2”,“diming”:“天津市”,“daima”:“120000000000”,“zidi”:2}, “wjr3”:{“dengji”:“2”,“diming”:“河北省”,“daima”:“130000000000”,“zidi”:11}, “wjr4”:{“dengji”:“2”,“diming”:“山西省”,“daima”:“140000000000”,“zidi”:11}, “wjr5”:{“dengji”:“2”,“diming”:“内蒙古自治区”,“daima”:“150000000000”,“zidi”:12}, “wjr6”:{“dengji”:“2”,“diming”:“辽宁省”,“daima”:“210000000000”,“zidi”:14}, “wjr7”:{“dengji”:“2”,“diming”:“吉林省”,“daima”:“220000000000”,“zidi”:9}, “wjr8”:{“dengji”:“2”,“diming”:“黑龙江省”,“daima”:“230000000000”,“zidi”:13}, “wjr9”:{“dengji”:“2”,“diming”:“上海市”,“daima”:“310000000000”,“zidi”:2}, “wjr10”:{“dengji”:“2”,“diming”:“江苏省”,“daima”:“320000000000”,“zidi”:13}, “wjr11”:{“dengji”:“2”,“diming”:“浙江省”,“daima”:“330000000000”,“zidi”:11}, “wjr12”:{“dengji”:“2”,“diming”:“安徽省”,“daima”:“340000000000”,“zidi”:16}, “wjr13”:{“dengji”:“2”,“diming”:“福建省”,“daima”:“350000000000”,“zidi”:9}, “wjr14”:{“dengji”:“2”,“diming”:“江西省”,“daima”:“360000000000”,“zidi”:11}, “wjr15”:{“dengji”:“2”,“diming”:“山东省”,“daima”:“370000000000”,“zidi”:17}, “wjr16”:{“dengji”:“2”,“diming”:“河南省”,“daima”:“410000000000”,“zidi”:18}, “wjr17”:{“dengji”:“2”,“diming”:“湖北省”,“daima”:“420000000000”,“zidi”:14}, “wjr18”:{“dengji”:“2”,“diming”:“湖南省”,“daima”:“430000000000”,“zidi”:14}, “wjr19”:{“dengji”:“2”,“diming”:“广东省”,“daima”:“440000000000”,“zidi”:21}, “wjr20”:{“dengji”:“2”,“diming”:“广西壮族自治区”,“daima”:“450000000000”,“zidi”:14}, “wjr21”:{“dengji”:“2”,“diming”:“海南省”,“daima”:“460000000000”,“zidi”:3}, “wjr22”:{“dengji”:“2”,“diming”:“重庆市”,“daima”:“500000000000”,“zidi”:2}, “wjr23”:{“dengji”:“2”,“diming”:“四川省”,“daima”:“510000000000”,“zidi”:21}, “wjr24”:{“dengji”:“2”,“diming”:“贵州省”,“daima”:“520000000000”,“zidi”:9}, “wjr25”:{“dengji”:“2”,“diming”:“云南省”,“daima”:“530000000000”,“zidi”:16}, “wjr26”:{“dengji”:“2”,“diming”:“西藏自治区”,“daima”:“540000000000”,“zidi”:7}, “wjr27”:{“dengji”:“2”,“diming”:“陕西省”,“daima”:“610000000000”,“zidi”:10}, “wjr28”:{“dengji”:“2”,“diming”:“甘肃省”,“daima”:“620000000000”,“zidi”:14}, “wjr29”:{“dengji”:“2”,“diming”:“青海省”,“daima”:“630000000000”,“zidi”:8}, “wjr30”:{“dengji”:“2”,“diming”:“宁夏回族自治区”,“daima”:“640000000000”,“zidi”:5}, “wjr31”:{“dengji”:“2”,“diming”:“新疆维吾尔自治区”,“daima”:“650000000000”,“zidi”:15}, “wjr32”:{“dengji”:“2”,“diming”:“台湾省”,“daima”:“710000000000”,“zidi”:0}, “wjr33”:{“dengji”:“2”,“diming”:“香港特别行政区”,“daima”:“810000000000”,“zidi”:0}, “wjr34”:{“dengji”:“2”,“diming”:“澳门特别行政区”,“daima”:“820000000000”,“zidi”:0} } }) 含义:
wjr({ “is_login”:1, “site”:“中国行政区划api”, “url”:“http://api.dangqian.com/apidiqu2/”, “jieshao”:“省市县乡村五级行政区划地址信息库”, “idengji”:"$$等级$$", “idiming”:"$$当前地区$$", “idaima”:"$$当前代码$$", “diming1”:"$$一级地区$$", “daima1”:"$$一级代码$$", “diming2”:"$$二级地区$$", “daima2”:"$$二级代码$$", “diming3”:"$$三级地区$$", “daima3”:"$$三级代码$$", “diming4”:"$$四级地区$$", “daima4”:"$$四级代码$$", “diming5”:"$$五级地区$$", “daima5”:"$$五级代码$$", “diming6”:"$$六级地区$$", “daima6”:"$$六级代码$$", “zidi”:$$子级数目$$, “banben”:"$$版本$$", “zhizao”:“王建然”, “qq”:“250247045”, “riqi”:"$$时间$$", “shike”:"$$服务器时刻$$", “id”:"$$id$$", “list”:{ $$地区列表集合$$ } })
根据你提供的API响应内容和结构,我们可以使用Node.js来解析这个JSONP格式的数据。JSONP(JSON with Padding)是一种跨域数据交互协议,它通过动态创建<script>
标签来获取远程数据。下面是一个简单的示例代码,展示如何解析这个API返回的数据。
首先,我们需要安装一些必要的模块,比如axios
用于发起HTTP请求,util
用于处理JSONP回调:
npm install axios
然后,编写解析代码:
const axios = require('axios');
const util = require('util');
// 定义请求的URL
const apiUrl = 'http://api.dangqian.com/apidiqu2/api.asp?format=json&callback=wjr&id=000000000000';
// 使用axios发起GET请求
axios.get(apiUrl)
.then(response => {
// 假设返回的数据包含一个名为data的属性,其中包含了JSONP响应
const data = response.data.replace(/wjr\(|\);$/g, '');
// 解析JSON字符串为JavaScript对象
const parsedData = JSON.parse(data);
// 输出解析后的数据
console.log(util.inspect(parsedData, { showHidden: false, depth: null }));
// 解析地区列表
const regions = parsedData.list;
for (let key in regions) {
if (regions.hasOwnProperty(key)) {
const region = regions[key];
console.log(`地区名称: ${region.deming}, 地区代码: ${region.daima}`);
}
}
})
.catch(error => {
console.error('请求失败:', error);
});
代码解释
-
引入依赖:
axios
:用于发起HTTP GET请求。util
:用于美化输出复杂对象。
-
定义API URL:
apiUrl
:这是我们要请求的API URL。
-
发起请求:
- 使用
axios.get
方法发起GET请求到指定的API URL。
- 使用
-
处理响应:
- 将返回的数据中的
wjr(
和);
移除,以便将其转换成有效的JSON字符串。 - 使用
JSON.parse
将字符串转换成JavaScript对象。
- 将返回的数据中的
-
输出解析结果:
- 使用
util.inspect
美化输出整个解析后的对象。 - 遍历
list
对象中的每个地区,并打印出地区名称和代码。
- 使用
这样,我们就可以解析并处理API返回的数据了。
截取前面的wjr(
和后面的)
,然后用JSON.parse转化为json对象
function wjr(data){
//data就是一个json对象
}
eval(返回值)
str = """
wjr({ "is_login":1, "site":"中国行政区划api", "url":"http://api.dangqian.com/apidiqu2/", "jieshao":"省市县乡村五级行政区划地址信息库", "idengji":"1", "idiming":"中国", "idaima":"000000000000", "diming1":"中国", "daima1":"000000000000", "diming2":"", "daima2":"", "diming3":"", "daima3":"", "diming4":"", "daima4":"", "diming5":"", "daima5":"", "diming6":"", "daima6":"", "zidi":34, "banben":"2012", "zhizao":"王建然", "qq":"250247045", "riqi":"2012-12-23 22:06:49", "shike":"2014-7-14 2:55:33", "id":"380", "list":{ "wjr1":{"dengji":"2","diming":"北京","daima":"110000000000","zidi":2}, "wjr2":{"dengji":"2","diming":"天津","daima":"120000000000","zidi":2}, "wjr3":{"dengji":"2","diming":"河北","daima":"130000000000","zidi":11}, "wjr4":{"dengji":"2","diming":"山西","daima":"140000000000","zidi":11}, "wjr5":{"dengji":"2","diming":"内蒙古","daima":"150000000000","zidi":12}, "wjr6":{"dengji":"2","diming":"辽宁","daima":"210000000000","zidi":14}, "wjr7":{"dengji":"2","diming":"吉林","daima":"220000000000","zidi":9}, "wjr8":{"dengji":"2","diming":"黑龙江","daima":"230000000000","zidi":13}, "wjr9":{"dengji":"2","diming":"上海","daima":"310000000000","zidi":2}, "wjr10":{"dengji":"2","diming":"江苏","daima":"320000000000","zidi":13}, "wjr11":{"dengji":"2","diming":"浙江","daima":"330000000000","zidi":11}, "wjr12":{"dengji":"2","diming":"安徽","daima":"340000000000","zidi":16}, "wjr13":{"dengji":"2","diming":"福建","daima":"350000000000","zidi":9}, "wjr14":{"dengji":"2","diming":"江西","daima":"360000000000","zidi":11}, "wjr15":{"dengji":"2","diming":"山东","daima":"370000000000","zidi":17}, "wjr16":{"dengji":"2","diming":"河南","daima":"410000000000","zidi":18}, "wjr17":{"dengji":"2","diming":"湖北","daima":"420000000000","zidi":14}, "wjr18":{"dengji":"2","diming":"湖南","daima":"430000000000","zidi":14}, "wjr19":{"dengji":"2","diming":"广东","daima":"440000000000","zidi":21}, "wjr20":{"dengji":"2","diming":"广西","daima":"450000000000","zidi":14}, "wjr21":{"dengji":"2","diming":"海南","daima":"460000000000","zidi":4}, "wjr22":{"dengji":"2","diming":"重庆","daima":"500000000000","zidi":2}, "wjr23":{"dengji":"2","diming":"四川","daima":"510000000000","zidi":21}, "wjr24":{"dengji":"2","diming":"贵州","daima":"520000000000","zidi":9}, "wjr25":{"dengji":"2","diming":"云南","daima":"530000000000","zidi":16}, "wjr26":{"dengji":"2","diming":"西藏","daima":"540000000000","zidi":7}, "wjr27":{"dengji":"2","diming":"陕西","daima":"610000000000","zidi":10}, "wjr28":{"dengji":"2","diming":"甘肃","daima":"620000000000","zidi":14}, "wjr29":{"dengji":"2","diming":"青海","daima":"630000000000","zidi":8}, "wjr30":{"dengji":"2","diming":"宁夏","daima":"640000000000","zidi":5}, "wjr31":{"dengji":"2","diming":"新疆","daima":"650000000000","zidi":15}, "wjr32":{"dengji":"2","diming":"台湾省","daima":"710000000000","zidi":0}, "wjr33":{"dengji":"2","diming":"香港特别行政区","daima":"810000000000","zidi":0}, "wjr34":{"dengji":"2","diming":"澳门特别行政区","daima":"820000000000","zidi":0} } })
"""
wjr = (data) ->
console.log data
eval(str)
还是我自己来解析吧; 这个不是使用的JSON,而是使用的JSONP方式传回的值。 什么是JSONP: http://victor-jan.iteye.com/blog/875061
http://www.cnblogs.com/mybest/archive/2011/12/13/2285730.html
解析方法 <!DOCTYPE html> <html> <head> <meta http-equiv=“Content-Type” content=“text/html; charset=utf-8” /> <title>中国</title> <script src=“jquery-1.3.2.min.js”></script>
</head> <body> <script type=“text/javascript”> function jsonpCallback(result) { //alert(result); /for(var i in result[‘list’]) { var daima = result[‘list’][i][‘daima’]; var diming = result[‘list’][i][‘diming’];//循环输出a:1,b:2,etc. }/
sd = "<div>"
for (var i in result['list']) {
sd += "<ul>"
sd += "<li>" + result['list'][i]['daima'] + "</li>"
sd += "<li>" + result['list'][i]['diming'] + "</li>"
sd += "</ul>"
}
sd += "</div>"
//alert(sd);
$("html body").append(sd);
}
var JSONP=document.createElement("script");
JSONP.type="text/javascript";
JSONP.src="http://api.dangqian.com/apidiqu2/api.asp?format=json&callback=jsonpCallback&id=000000000000";
document.getElementsByTagName("head")[0].appendChild(JSONP);
</script> </body> </html>
用 jquery.ajax 的 jsonp 形式去用这接口
JSON.parse(String)
和 JSON.stringify(Object)
可以解析一切字符串和反解析js对象(function除外)。
带换行的字符串没办法的用 JSON.parse 解析。
为了解析你所提供的API返回的数据,可以使用Node.js编写一个简单的脚本来处理JSONP格式的数据。以下是一个示例代码,它使用axios
库来获取远程数据,并通过JSONP的方式解析返回的数据。
首先确保安装了axios
库:
npm install axios
然后创建一个JavaScript文件(例如parseApiData.js
)并添加以下代码:
const axios = require('axios');
async function fetchData() {
try {
const response = await axios.get('http://api.dangqian.com/apidiqu2/api.asp', {
params: {
format: 'json',
callback: 'wjr',
id: '000000000000'
}
});
// Remove the callback wrapper and parse the JSON data
const data = JSON.parse(response.data.replace(/wjr\(/, '').replace(/\)$/, ''));
console.log(data);
// 现在你可以处理data对象,比如打印出省份的信息
console.log('Province Information:');
for (let key in data.list) {
if (data.list.hasOwnProperty(key)) {
let province = data.list[key];
console.log(`${province.deming}: ${province.daima}`);
}
}
} catch (error) {
console.error('Error fetching or parsing data:', error);
}
}
fetchData();
解释:
- 引入axios库:用于发起HTTP请求。
- 定义
fetchData
函数:该函数负责发送GET请求到指定URL,并传入必要的参数。 - 处理响应:从响应中获取原始数据,并移除回调函数名称以提取实际的JSON数据。
- 解析数据:使用
JSON.parse()
将字符串转换为JavaScript对象。 - 输出数据:打印解析后的数据,特别是列出所有的省份信息。
这段代码展示了如何从API中获取数据,并将其解析为JavaScript对象以便进一步处理。