-
javascript用eval解析json字符串
JSON (JavaScript Object Notation)一种简单的数据格式,比xml更轻巧。 JSON 是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON 数据不需要任何特殊的 API 或工具包。
JSON的规则很简单: 对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。具体细节参考http://www.json.org/json-zh.html
举个简单的例子:
js 代码
function showJSON() {
var user =
{
“username”:”andy”,
“age”:20,
“info”: { “tel”: “123456″, “cellphone”: “98765″},
“address”:
[
{"city":"beijing","postcode":"222333"},
{"city":"newyork","postcode":"555666"}
]
}
alert(user.username);
alert(user.age);
alert(user.info.cellphone);
alert(user.address[0].city);
alert(user.address[0].postcode);
}
这表示一个user对象,拥有username, age, info, address 等属性。同样也可以用JSON来简单的修改数据,修改上面的例子
js 代码
function showJSON() {
var user =
{
“username”:”andy”,
“age”:20,
“info”: { “tel”: “123456″, “cellphone”: “98765″},
“address”:
[
{"city":"beijing","postcode":"222333"},
{"city":"newyork","postcode":"555666"}
]
}
alert(user.username);
alert(user.age);
alert(user.info.cellphone);
alert(user.address[0].city);
alert(user.address[0].postcode);
user.username = “Tom”;
alert(user.username);
}
JSON提供了json.js包,下载http://www.json.org/json.js 后,将其引入然后就可以简单的使用object.toJSONString()转换成JSON数据。js 代码
function showCar() {
var carr = new Car(“Dodge”, “Coronet R/T”, 1968, “yellow”);
alert(carr.toJSONString());
}
function Car(make, model, year, color) {
this.make = make;
this.model = model;
this.year = year;
this.color = color;
}
可以使用eval来转换JSON字符到Objectjs 代码
function myEval() {
var str = ‘{ “name”: “Violet”, “occupation”: “character” }’;
var obj = eval(‘(‘ + str + ‘)’);
alert(obj.toJSONString());
}或者使用parseJSON()方法
js 代码
function myEval() {
var str = ‘{ “name”: “Violet”, “occupation”: “character” }’;
var obj = str.parseJSON();
alert(obj.toJSONString());
}下面来看看 JavaScript 的 eval 函数。
在php里用json_encode把一个对象encode为字符串返回,前端用javascript去取的时候,用eval来得到一个js对象,但是eval返回的老是空。eval 函数会评估给定的一个JavaScript代码的字符串,并试图去执行包含在字符串里的表达式或者一系列的合法的 JavaScript 语句。eval 函数将把最后一个表达式或者语句包含的值或引用作为返回值。
<script type=”text/javascript”>
var bar = “bar”;
var foobar = eval(‘”foo”+bar’);
alert(bar + foobar);//执行语句foobar = eval(‘if(bar = “bar”){bar = “foo-bar”;}else{bar = “bar-foo”;}’);
alert(foobar);//返回语句中包含的值
</script>JSON 和 对象字面量(Object Literals)的区别:JSON 的名字部分严格用引号+名字来表示。
<script type=”text/javascript”>
//对象字面量
var objectLiteral = {
name:”Objector.L”,
age:”24″,
special:”JavaScript”,
sayName:function(){
return this.name;
}
};//JSON 对象
var jsonFormat = {
“summary”:”Blogs”,
“blogrolls”:[
{
"title":"Explore JavaScript",
"link":"http://example.com"
},
{
"title":"Explore JavaScript",
"link":"http://example.com"
}
]
};
</script>由于 Ajax 的兴起, JSON 这种轻量级的数据格式作为客户端与服务器端之间传输的格式逐渐流行起来,进而出现的问题是如何将服务器端构建好的 JSON 数据转换为可用的 JavaScript 对象,利用 eval 函数无疑是一种简单而直接的方法。在转化的时候需要将 JSON 字符串的外面包装一层园括号:
var jsonObject = eval(“(“+ jsonFormat +”)”)
加园括号的目的是迫使 eval 函数在评估 JavaScript 代码的时候强制将括号内的表达式(expression)转换为对象,而不是作为语句(statement)来执行。举一个例子,例如对象字面量{},如若不佳加外层的括号,那么eval会将大括号之别为JavaScript代码块的开始结束标记机,那么{}将被认为是执行了一句空语句。所以下面两个执行结果是不同的:
alert(eval(“{}”)); //return undefined
alert(eval(“({})”)); //return [object Object]
JSON 格式的名字部分为什么要加引号?因为eval函数会将{foo:”bar”}解释成合法的JavaScript 语句,而非表达式。但人们往往是想让eval将这段代码解释成一个对象。所以JSON 格式会强制你去在名字的外侧加上引号,再结合圆括号,eval就不会错误的将JSON解释成代码块。//eval 错误解析语义
alert(eval(‘{foo:”bar”}’)); //return “bar”,incorrect
//eval 正确解析JSON
alert(eval(‘({“foo”:”bar”})’));//return JSON object,correct
下面使用prototype写一个JSON的ajax例子。先写一个servlet (我的是servlet.ajax.JSONTest1.java)就写一句话
java 代码
response.getWriter().print(“{ /”name/”: /”Violet/”, /”occupation/”: /”character/” }”);
再在页面中写一个ajax的请求js 代码
function sendRequest() {
var url = “/MyWebApp/JSONTest1″;
var mailAjax = new Ajax.Request(
url,
{
method: ‘get’,
onComplete: jsonResponse
}
);
}
function jsonResponse(originalRequest) {
alert(originalRequest.responseText);
var myobj = originalRequest.responseText.parseJSON();
alert(myobj.name);
}
prototype-<st1:chsdate w:st=”on” isrocdate=”False” islunardate=”False” day=”30″ month=”12″ year=”1899″>1.5.1</st1:chsdate>.js中提供了JSON的方法,String.evalJSON(), 可以不使用json.js, 修改上面的方法js 代码
function jsonResponse(originalRequest) {
alert(originalRequest.responseText);
var myobj = originalRequest.responseText.evalJSON(true);
alert(myobj.name);
}
JSON还提供了java的jar包 http://www.json.org/java/index.html API也很简单,下面举个例子在javascript中填加请求参数
js 代码
function sendRequest() {
var carr = new Car(“Dodge”, “Coronet R/T”, 1968, “yellow”);
var pars = “car=” + carr.toJSONString();
var url = “/MyWebApp/JSONTest1″;
var mailAjax = new Ajax.Request(
url,
{
method: ‘get’,
parameters: pars,
onComplete: jsonResponse
}
);
}
使用JSON请求字符串就可以简单的生成JSONObject并进行解析,修改servlet添加JSON的处理(要使用json.jar)java 代码
private void doService(HttpServletRequest request, HttpServletResponse response) throws IOException {
String s3 = request.getParameter(“car”);
try {
JSONObject jsonObj = new JSONObject(s3);
System.out.println(jsonObj.getString(“model”));
System.out.println(jsonObj.getInt(“year”));
} catch (JSONException e) {
e.printStackTrace();
}
response.getWriter().print(“{ /”name/”: /”Violet/”, /”occupation/”: /”character/” }”);
}
同样可以使用JSONObject生成JSON字符串,修改servletjava 代码
private void doService(HttpServletRequest request, HttpServletResponse response) throws IOException {
String s3 = request.getParameter(“car”);
try {
JSONObject jsonObj = new JSONObject(s3);
System.out.println(jsonObj.getString(“model”));
System.out.println(jsonObj.getInt(“year”));
} catch (JSONException e) {
e.printStackTrace();
}
JSONObject resultJSON = new JSONObject();
try {
resultJSON.append(“name”, “Violet”)
.append(“occupation”, “developer”)
.append(“age”, new Integer(22));
System.out.println(resultJSON.toString());
} catch (JSONException e) {
e.printStackTrace();
}
response.getWriter().print(resultJSON.toString());
}
js 代码
function jsonResponse(originalRequest) {
alert(originalRequest.responseText);
var myobj = originalRequest.responseText.evalJSON(true);
alert(myobj.name);
alert(myobj.age);
}
参考
http://www.json.org/js.html
http://www.blogjava.net/Jkallen/archive/2006/03/28/37905.html
http://www.json.org/
http://www.prototypejs.org/learn/json
http://www.json.org/java/index.html
http://www.ibm.com/developerworks/cn/web/wa-ajaxintro10/index.html没有评论 -
关于网站备案的破事
2011年12月初在时代互联的备案后台提交了一份网站备案,22号登录备案系统后台发现被退回了。显示的状态为“退回接入者修改(报备)”
今日登录邮箱发现了两封邮件,内容:
尊敬的用户XXX,您的ICP备案申请经广东通信管理局审核,不能完全符合备案要求,现已被退回。详情请咨询您接入服务提供商。
工业和信息化部网站备案系统另一封的内容为:
退回原因:个人备案前缀不相同的域名数超4个或单位超过31个时须提供每个域名的网站建设方案书,请接入商将网站建设方案书原件,并《网站备案信息真实性核验单》原件,双方接入合同、域名注册证书、组织机构代码证工商营业执照、网站负责人身份证复印件,网站负责人单位授权书原件,照片打印件提供我局核验。(所有材料由接入商把关后递交,邮寄地址:510080 广州市执信南路3号710室)
在中国站长站看到以下消息:近日,有消息称部分广东IDC开始下发《广东通管局关于个人网站备案补充新要求》通知。通知中称,从2011年10月10日起,广东个人网站备案申请网站数量超过五家,须提须提供主办单位证件、网站建设方案书、所涉域名注册证书等。
广东通信管理局称,近日的确向IDC下发了个人网站备案要求的新规。在原有备案要求的基础上,增加了新规定。即从2011年10月10日起,广东个人网站备案申请网站数量超过五家,IDC须提须提供主办单位证件、网站建设方案书、及所涉域名注册证书到通管局核验,此外,个人备案的《网站备案信息真实性核验单》中,承诺书内容须由网站负责人亲笔手抄。
还要亲笔手抄呢,抄你个妹啊!该作为的不作为,整天想些办法来整P民老百姓~fuck china mii once again.
-
如何提高工作效率?
-
Memcached管理与监控工具MemAdmin
MemAdmin是一款可视化的Memcached管理与监控工具,使用PHP开发,体积小,操作简单。
主要功能:
服务器参数监控:STATS、SETTINGS、ITEMS、SLABS、SIZES实时刷新
服务器性能监控:GET、DELETE、INCR、DECR、CAS等常用操作命中率实时监控
支持数据遍历,方便对存储内容进行监视
支持条件查询,筛选出满足条件的KEY或VALUE
数组、JSON等序列化字符反序列显示
兼容memcache协议的其他服务,如Tokyo Tyrant (遍历功能除外)
支持服务器连接池,多服务器管理切换方便简洁。包含中文名的下载地址:memadmin-1.0.8.tar.gz
-
ecmall二次开发不完全手册
在根目录里新建了一个目录hotel,用于放酒店相关的程序文件,但是运行时会报脚本错误。查看一下html发现是$this->lib_base目录读取错误了。
/includes/ecapp.base.php 文件_config_view()函数里,将:
$this->_view->lib_base = site_url() . ‘/includes/libraries/javascript’;
修改为:
$this->_view->lib_base = dirname(site_url()) . ‘/includes/libraries/javascript’;
-
[转]中航信eterm常见错误信息解释
ETRY电子票重出票指令,适用于各种原因(比如系统传输等问题)导致电子票出票失败时,在出票当天重新出票。希望大家一起参与写下自己遇见的错误代码 谢谢!!
有些情况下,是无法使用该指令的。典型的几种错误提示如下:
●CAN NOT RETRY THIS PNR. ETDZ FIRST说明:该PNR没有执行ETDZ指令
● RMK CA/XXXXX NOT FOUND. PNR MISMATCH
说明:没有返回ICS PNR(航空公司大编码)
● PNR TICKETED 说明:该PNR已被出票
● CAN NOT RETRAY THIS ET, TICKET IS OUT OF DATE
说明:该ET票不是当天销售的
● ACTION 说明:行动代码不正确
● AIRLINE 说明: 航空公司代码不正确
● AMOUNT 说明:数量,通常指FC、FN中的票价输入不正确
● AUTHORITY 说明:权限问题
● CASH COLLECTION 说明:FN中缺少SCNY项
● CONTACT ELEMENT MISSING
说明:缺少联系组,将旅客的联系电话输入到PNR中
● CURRENCY 说明:货币代码不正确
● DATE 说明:输入的日期不正确.
● DEVICE 说明:打票机序号不正确
● DUP ID 说明:PNR中某项重复,或缺少旅客标识
● ELE NBR 说明:序号不正确
● FLT NUMBER 说明:航班号不正确
● FORMAT 说明:输入格式不正确
● ILLEGAL 说明:不合法
● INACTIVE 说明:检查打票机各项状态,一般体现在没有进工作号
● INFANT 说明:缺少婴儿标识
● INPUT 说明:打票机的输入状态
● INVALID CHAR 说明:存在非法字符,或终端参数设置有误
● ITINERARY DOES NOT MATCH FC
说明:FC与PNR中的航程不符
● MANUAL 说明:手工出票
● MAX TIME FOR EOT – IGNORE PNR AND RESTART
说明:建立了航段组,但未封口的时间超过5分钟,这时系统内部已经做了IG,将座位还原,营业员应做IG,并重新建立PNR
● NAME LENGTH 说明:姓名超长或姓氏少于两个字符
● NAMES 说明:PNR中缺少姓名项
● NO DISPLAY 说明:没有显示
● NO NAME CHANGE FOR MU/Y
说明:某航空公司不允许修改姓名
● NO QUEUE 说明:说明该部门此类信箱不存在
● OFFICE 说明:部门代号不正确
● OUTPUT 说明:打票机的输出状态
● PENDING 说明:表示有未完成的旅客订座PNR,在退号前必须完成或放弃它。
● PLEASE SIGN IN FIRST 说明:请先输入工作号,再进行查询
● PLS INPUT FULL TICKET NUMBER
说明:输入完整的票号,航空公司代码及十位票号
● PLS NM1XXXX/XXXXXX 说明:姓名中应加斜线(/),或斜线数量不正确
● PNR TKTD 说明:该记录已出过票,取消PNR中的票号项
● PROFILE PENDING 说明:表示未处理完常旅客的订座,PSS:ALL处理
● PROT SET 说明:工作号密码输入错误
● PSGR ID 说明:旅客标识不正确
● Q TYPE 说明:所要发送到的信箱的种类在目的部门中没有定义
● Q EMPTY 说明:信箱中此类信箱为空的,已处理完成,没有需要处理的内容
● QUE PENDING 说明: 表示未处理完信箱中的QUEUE,QDE或QNE
● RL 说明:记录编号不存在
● SCH NBR 说明:航线序号不符
● SEATS 说明:订座数与PNR中姓名数不一致,可RT检查当前的PNR
● SEGMENT 说明: 航段
● SIMULTANEOUS MODIFICATION—REENTER MODIFICATION
说明: 类似的修改,IG,并重新输入当前的修改
● STOCK 说明: 票号不正确或没票号
● TICKET PRINTER IN USE 说明: 表示未退出打票机的控制,退出后即可
● TICKET STATUS ELEMENT MISSING 说明: 缺少票号组
● TIME 说明: 输入时间不正确
● UNABLE 说明: 不能
● USER GRP 说明: 工作号级别输入错误
● WORKING Q
说明: 表示营业员正在对某一种信箱进行处理,未处理完时,不能再处理另外一种Q。这时若要结束原来的处理,可以做QDE或QNE,然后再QS:xx。
● NOT ENOUGH TICKET NUMBERS ASSIGNED TO DEVICE 说明:电子客票号分配不够DUPLICATE SEGMENT 重复部分
PNR TICKETED 翻译为PNR已出过票,但多数是由于代理没规范订座,ETDZ时假票号并未删除,方法一多做几次直到出票成功,方法二规范订座。
● CHECK TAX AMOUNT 说明:检查电子客票退票价格项 XCNYxxxx.xx 税款总额 — 用于填写TAX AMOUNT 栏. 此项可省
● TKT MUST BEEN PRINTED TODAY 只能作废当天打印过的客票或者不是自己出的票
●ET PASSENGER DATA NOT FOUND 说明:是不能出电子客票
●做SP就提示CHECK CONTINUITY AGENCY CT 说明:SP:(人数序号)
●eterm指令出错信息RETRANSMIT 说明:这个属于ETERM系统和航空公司系统连接问题 一般体现在CZ 784的航班上
婴儿电子客票出票错误提示
● 输入:XN IN/TEST/BABY INF(1DEC06)/p1
显示:FORMAT
解决方法:INF后括号内只要输入婴儿的出生月和年,不需要输日期;
● 输入:SSR INFT CA NN1 TEST/BABY 1DEC06/P1/S2
显示:BIRTHDAY(DDMMMYY),PLS
解决方法:婴儿的出生日月年应输入完全,如01DEC06, 1前面的0也不可省略;
● 输入:ETDZ:5/P1,INF
显示: PNR/FC/P1
解决方法:单独出婴儿票之前应补充全大人的FN/FC;
● 输入:ETDZ:5
显示:ET PASSENGER NAME MISMATCH
解决方法:婴儿姓名的XN项输入注意INF和(DEC06)之前不要有空格。
-
[转]ETERM航班销售控制指令
大系统查看销售情况指令
FLP:航班号/日期/航段 (读取航班舱位销售情况)
FLR:航班号/日期 (查询航班的订座和出票情况)
RO日期/航班号 (查看航班摆舱情况)
IM:S/航班号/日期/航段/Y座位数 (调整座位布局) 扩舱/收舱
IM:L/航班号/日期/航段/舱位数目 (调整子舱位位数)
IM:I/航班号/日期/航段/舱位 S(吸收) R(还原)
IM:N/航班号/日期/航段/舱位 S(做成Q状态) R(还原)
ACRT:OFFICE号 (有A显示,表示正在工作)
MSG:PID号/1 电报内容自由格式 (发电报)
AV:J/航班号/起始日期/终止日期 (查看机型变更跟舱位开放情况)
DC:日期/航段/航班号/OFFICE号 (检查重复订座)
PROCESS (打开Q提出DCQ)
FVP:A/日期/到达城市/航空公司 (查看到港的VIP名单)
FVP:O/日期/到达城市/航空公司 (查看离港VIP名单)
DIH:航班号/日期 (查看航班变更历史记录)
AS:航班号/舱位/日期/航段/AS/CIE (使航空公司系统与代理人系统匹配)
BSR PRF/航班号/日期 (查每天销售情况)
RB:起始日期/终止日期/D/航段 (查询几天的销售情况)
也可以使用 RB 日期 航段
CLW:航班号/日期 (NO 所有的HL的票)
MLXZ:航班号/日期/航段 (提取被取消航班旅客名单)
FTKT:航班号/日期/航段 (计算当天各家航空公司客座率)
MLB/航班号/日期/航段 (提取旅客名单)
如果要看出票代理的OFFICE号 可以MLB/航班号/日期/航段/O/1E
如果只要看PNR的话 可以MLB/PNR/航班号/日期/航段/O/1E
MLU5/航班号/日期/航段 (提取航班儿童旅客名单)
MLG/PNR/航班号/日期/航段 (提取航班团队名单)
MLBNG/PNR/航班号/日期/航段 (提取航班非团队旅客名单)
MLNR/航班号/日期/航段 (提取不是RR状态的旅客名单)
MLR/航班号/日期/航段 (提取RR状态的旅客明名单)
MLZX/航班号/日期/航段 (提取已经取消航班的所以旅客名单)
MLS1/航班号/日期/航段 (提取GOSHOW旅客名单)
MLS2/航班号/日期/航段 (提取NOSHOW旅客名单)
MLM/航班号/日期/航段 (提取特殊餐食旅客名单)
MLS5/航班号/日期/航段 (提取轮椅旅客名单)
ML:L99/航班号/日期/航段 (提取当天出票的旅客名单)
MLT3/航班号/日期 (提起假RR记录)
SS+航班号+舱位+日期+航段+NN人数 (预定航班 相当于AV+SD指令 不过比AV方便)
TN:N/航班号/日期/中转地/F 从其他航班中转到此航班的中转旅客
TN:N/航班号/日期/中转地/T 从该航班中转到其他航班的中转旅客
BSR:PRF/航班号/日期/航段 查询航班销售进度
K票 KK NO票 NO
航空公司B配置大系统指令
1 查航班指令
AV 航段+乘机日期+参数 (注:参数D 表示直飞,可加可不加)
例:AV KMGSHA20JUND
2 查看某天某个航段的座位销售数
RB 航班日期/航段
例:RB 15JUN/KMGURC
注:前面0/8表示头等舱有8个座,售0个,8/123表示经济舱123个座,售8个,36/241表示总计售出36个还剩241个。
3 查看某天某个航班的座位销售数
FLP 航班号/乘机日期 (注,MU以外航班也可查询)
例:FLP MU5801/6JUN
注:1号框是输入的指令,2号框表示对应的舱已销售座位数,3号框表示总计,已售121个,全舱138个,上座率87%。
4 查MU某个航班舱位的竖试销售量
ROC/航班号/日期
例:ROC/MU5805/6JUN
注:33表示还乘的座位数,132表示全舱数,99表示已售的数含团队,42表示出的团座位数。BKD项竖式相加就是所有的舱位合计售数。GRS表示团队项。
5.查看某天MU某个航班上出票的PNR。
MLB/航班号/日期
例:MLB/MU5819/28JUN
注:旅客姓名,PNR,状态。
6.查看某天MU某个航班上团队PNR。
注:15BL 团名,BL1H2 记录,X 舱位,HN15 状态人数。
7.FLR 查看航班记录出票数与预订数格试 FLR 航段+日期
例:FLR KMGSHA12NOV
其它指令:
FF FD RT SK
-
CSDN会员数据库被泄漏事件
又是疯狂地忙了一天,晚上下班打开微博看到 @vczh 转发的微博才知道CSDN数据库会员信息被泄漏一事。
最不可理喻的是居然采用了明文密码,许多会员可能会在多个网站注册使用了相同的用户名及密码,而且泄漏的数据库里还有会员所使用的邮箱。这个危害很大,后果很严重,各位童鞋们赶紧把其它站所有重要的密码给修改掉。 -
editplus编辑perl/php双击选中变量的解决办法
editplus里使用了语法增强插件之后,好像双击只选中了变量名的单词部分,没有包含$符号,一直以为是editplus有问题,自从更新了editplus到3.31版本之后,发现多了文字加亮功能,也就是说双击选中一个名字之后,同文内有相同名字的也会加亮显示,这功能实在是太有用了;另外在写PHP时发现双击选中变量名时包含了$符号了,研究了一大个早上才发现原来是.stx语法增强插件搞的鬼。
-
[转]Eterm通讯协议分析
这是转载的CSDN上一篇别人写的通信协议分析,转来转去,都不知道原作者是谁了,如果原作者看到此文,麻烦告知一声吧,谢过。
eterm版本:3.630SCHbuild091027)
登录截取的封包为:01 A2 65 66 61 8E 68 65 51 6C 69 61 6E 67 00 00 00 00 65 65 65 65 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 30 30 30 63 32 39 39 62 62 66 33 39 31 39 32 2E 31 36 38 2E 31 2E 32 30 38 20 20 33 36 33 30 34 31 30 00 30 30 30 30 30 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
