对接一个某个大公司的接口,返回的数据有json, xml 和jsonp三种。下边把解析方法记录一下,备用。
1.解析xml
- 下载xmldom库:https://github.com/jindw/xmldom
- 下载文件夹后,把xmldom-master改名为xml
- 放在小程序工程内,在需要调用的文件中引入头文件
注:我是放在index的同层目录,根据位置改变引入链接var Parser = require("../xml/dom-parser.js");
- 使用示例
//模拟xml数据 var xml = "<? xml version =\"1.0\" encoding=\"utf - 8\"?><Response><Type><![CDATA[1]]></Type><Commands> <Command name=\"notrq\" state=\"0\" /> </Commands><Question><![CDATA[cjwt_08]]></Question><Content><![CDATA[123!@#abc!@#456!@#def]]></Content><Similarity><![CDATA[1.0]]></Similarity><RelatedQuestions><Question><![CDATA[cjwt_08]]></Question></RelatedQuestions></Response>"; var XMLParser = new Parser.DOMParser() var doc = XMLParser.parseFromString(xml); var docRoot = doc.getElementsByTagName('Content')['0']; var str = docRoot.firstChild.nodeValue; var list = str.split("!@#");// 转为数组 console.log(list) //打印结果 ["123", "abc", "456", "def"]
2.解析JSONP + base64解码
1.jsonp截取需要的内容
//jsonp 解析
analyticaJsonpData() {
let jonspStr = "jsonpCallback({\"retcode\":0,\"retmsg\":\"success\",\"records\":87,\"datas\":\"5oiR5piv5LiA5Y+q57KJ5Yi35YygLOeyieWIt+acrOmihuW8ug==\"})";
//接受数据先转成文本
var dataStr = jonspStr.toString();
// 截取字符串
dataStr = dataStr.replace("jsonpCallback(", "")
dataStr = dataStr.replace(")", "")
var data = JSON.parse(dataStr);
var str = this.base64_decode(data.datas);
console.log(str)
//打印结果
//我是一只粉刷匠,粉刷本领强
},
// base64解码
base64_decode(input){
var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
var output = "";
var chr1, chr2, chr3;
var enc1, enc2, enc3, enc4;
var i = 0;
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
while (i < input.length) {
enc1 = base64EncodeChars.indexOf(input.charAt(i++));
enc2 = base64EncodeChars.indexOf(input.charAt(i++));
enc3 = base64EncodeChars.indexOf(input.charAt(i++));
enc4 = base64EncodeChars.indexOf(input.charAt(i++));
chr1 = (enc1 << 2) | (enc2 >> 4);
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
chr3 = ((enc3 & 3) << 6) | enc4;
output = output + String.fromCharCode(chr1);
if (enc3 != 64) {
output = output + String.fromCharCode(chr2);
}
if (enc4 != 64) {
output = output + String.fromCharCode(chr3);
}
}
return this.utf8_decode(output);
},
utf8_decode(utftext) { // utf-8解码
var string = '';
let i = 0;
let c = 0;
let c1 = 0;
let c2 = 0;
while (i < utftext.length) {
c = utftext.charCodeAt(i);
if (c < 128) {
string += String.fromCharCode(c);
i++;
} else if ((c > 191) && (c < 224)) {
c1 = utftext.charCodeAt(i + 1);
string += String.fromCharCode(((c & 31) << 6) | (c1 & 63));
i += 2;
} else {
c1 = utftext.charCodeAt(i + 1);
c2 = utftext.charCodeAt(i + 2);
string += String.fromCharCode(((c & 15) << 12) | ((c1 & 63) << 6) | (c2 & 63));
i += 3;
}
}
return string;
}
end