求一个解析以下内容的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”:{ $$地区列表集合$$ } })


9 回复

根据你提供的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);
    });

代码解释

  1. 引入依赖

    • axios:用于发起HTTP GET请求。
    • util:用于美化输出复杂对象。
  2. 定义API URL

    • apiUrl:这是我们要请求的API URL。
  3. 发起请求

    • 使用axios.get方法发起GET请求到指定的API URL。
  4. 处理响应

    • 将返回的数据中的wjr();移除,以便将其转换成有效的JSON字符串。
    • 使用JSON.parse将字符串转换成JavaScript对象。
  5. 输出解析结果

    • 使用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();

解释:

  1. 引入axios库:用于发起HTTP请求。
  2. 定义fetchData函数:该函数负责发送GET请求到指定URL,并传入必要的参数。
  3. 处理响应:从响应中获取原始数据,并移除回调函数名称以提取实际的JSON数据。
  4. 解析数据:使用JSON.parse()将字符串转换为JavaScript对象。
  5. 输出数据:打印解析后的数据,特别是列出所有的省份信息。

这段代码展示了如何从API中获取数据,并将其解析为JavaScript对象以便进一步处理。

回到顶部