【备忘】ASP操作JSON数据超简便方法

  首先想咆哮句:用ASP写网页的你真的真的真的尼玛伤不起啊。。今天终于尼玛搞定了豆瓣API的发送问题啊,,各种曲折啊。。我都懒得说啊。。。一个换行的理解就引发惨案啊。。我今天才看见每行结尾还有个逗号啊。。此处省略N个字啊。。。。

  此类API的意义在于你可以把豆瓣、腾讯微博、新浪微博什么的数据拿过来用,就像积木一样,搭出什么就看你的创意和能力了。。

  请求的数据会根据你的设置以JSON或者XML格式传递,当然本文只讲JSON,示例为腾讯API的SDK,地址见:http://www.wdssmq.com/test/txapi/

  登陆成功后可以看到输出的JSON字符串和摘取的部分用户信息,然后附上一个JSON在线格式化工具:http://jsonformatter.curiousconcept.com/,格式化后可以看到这种树形结构也不是很难阅读嘛。。

  JSON(JavaScript Object Notation)是基于JavaScript的一个字集,所以JS可以直接对其进行操作,而JS是可以与ASP一起在服务端远行的(Oauth授权时用到的HMAC-SHA1签名函数也是这样实现的)

<script language="javascript" type="text/javascript" runat="server">
function toObject(json) {
eval("var o=" + json);
return o;
}

function getItem(obj,Num,Name){
return obj[Num][Name];
}
</script>

  上边的函数已经包含在了SDK的base64.asp文件中(这个文件名是因为刚开始的理解错误,,就一直这么用了。。里边还有HMAC-SHA1签名函数),其他程序可选择存为单独文件或者和ASP代码放在一起(放在<%……%>外边)

  然后是ASP部分,直接复制的SDK中的,,toObject()的参数为JSON字符串,可对照格式化后的树形结构输出想要的部分,与data同级的msg和ret两个字段可分别使用get_user_info.msg和get_user_info.ret获得。

<%
Dim get_user_info
Set get_user_info = toObject(gethttp(get_oauth_url(user_info_url)))
Response.Write "昵称:"&get_user_info.data.nick & "<br/>"
Response.Write "帐号:"&get_user_info.data.name & "<br/>"
Response.Write "广播:"&get_user_info.data.tweetnum & "<br/>"
Response.Write "听众:"&get_user_info.data.fansnum & "<br/>"
Response.Write "收听:"&get_user_info.data.idolnum & "<br/>"
Response.Write "标签:"&getItem(get_user_info.data.tag,0,"name") & "<br/><br/>"
'想要标签全部输出的话可以做个循环,从0到9,不为空就输出并且继续。。
%>

  如果你的腾讯微博设置了个人标签,可以看到"tag"后边是以方括号包含的多组值,就像一个数组。。好吧,,这就是一个数组,在JS中可以用get_user_info.data.tag[0].name的方式获得其中的值,不过现在是在ASP中,虽然把JSON数组对象传递了过来,但是ASP好像没法操作,ASP中没有方括号的用法,圆括号不管用。。那就再用JS吧——JS部分的第二个函数。

  直接Response.Write get_user_info.data.tag会输出多个[object Object],好像是指用户自定义对象,把它传回JS,带上数组序号和字段名,然后返回相应的值——getItem(get_user_info.data.tag,0,"name")

  最后附上一个可以遍历对象的函数,按需要在服务器或者客户端运行。。。当然如果可以确定是JSON对象时可以用JSON.stringify(obj)将JSON转为字符串。JSON.parse(string)将字符串转为JSON格式

function viewObject(obj) {
  var msg = '{\n';
  for (var a in obj) {
    msg += a + ':';
    if (typeof obj[a] == 'object') {
      msg += viewObject(obj[a]) + ',\n';
    } else if(typeof obj[a] == 'string') {
      msg += '"' + obj[a] + '",\n';
    }else if(typeof obj[a] == "number"){
      msg += obj[a] + ',\n';
    }else {
      msg += '"' + (obj[a]+"").replace(/\"/g,'\\"').replace(/\n/g,"") + '",\n';
      // msg += '"' + obj[a] + '",\n';
    }
  }
  msg = msg.replace(/,\n?$/, '');
  return msg + '\n}';
}

原文链接:http://www.wdssmq.com/post/ASPShuChuJSONShuJuChaoJianBianFangFa.html

分享本文:新浪微博腾讯微博

神来一句:

  • [贱人就是矫情]
  • [人艰不拆]
  • [朕知道了]
  • [不明觉厉]
  • [这真是极好的]
  • [也真是醉了]
  • [点个赞]
  • [你那么萌你家人造吗?]
  • [涨姿势!]
赞助一下
分享