fastjson 可以设置值不加引号吗

TonyJian 发布于 2012/08/02 18:59
阅读 5K+
收藏 0

@wenshao 你好,想跟你请教个问题:

fastjson可以设置值不加引号吗,因为很多情况下返回给js的json中,有function这样的值,加了引号就无法执行了,3q

比如:

 {
    'name' : 'tony',
    'success' : function() {
        alert(1);
    }
}
加载中
0
wenshao
wenshao
自己写一个类,实现JSONAware接口
TonyJian
TonyJian
这个接口还真不知道怎么用,有文档或例子吗,难道把返回的JSON字符串自己过滤一遍function?
0
Andre.Z
Andre.Z
最好不要在返回的值里面写方法内容,你完全可以返回一个变量值,前端根据这个值调用不同的实现。否则,修改一次,就要改类,麻烦。你这样,耦合度太大了。
Andre.Z
Andre.Z
回复 @TonyJian : 没看明白我的意思?函数主体不要在返回的信息中,返回个简单类型值就好了。页面上写函数主体。
TonyJian
TonyJian
回复 @Andre.Z : 带引号意味着js会把他认为是字符串,而这个地方,是要把他作为一个函数执行的,不会要我用eval吧 实际上我用的是highcharts,我可改不了他的源码
Andre.Z
Andre.Z
回复 @TonyJian : 变量带引号怎么了?有问题??
TonyJian
TonyJian
返回变量,他也是带引号的啊
0
TonyJian
TonyJian

引用来自“Andre.Z”的答案

最好不要在返回的值里面写方法内容,你完全可以返回一个变量值,前端根据这个值调用不同的实现。否则,修改一次,就要改类,麻烦。你这样,耦合度太大了。
回复 @Andre.Z : 你的意思是这个变量只是代表一个标识,到页面上通过获取json中的这个值,来判断调用哪个函数吗?如果是这样,问题是,我用java做了highcharts的封装,这段json其实是highcharts的配置,他的配置中,这个元素就是个function,我没办法修改他的源码。除非我再用js封装一下,js来解析这个json,把变量值对应的函数找出来重新组织成highcharts能用的json,但是这样又麻烦了。我希望fastjson直接能实现。之前我用json-lib,它里面将function开头的字符串外的引号去掉了,现在我想用fastjson替换json-lib
0
TonyJian
TonyJian
原来就这样,我晕了
public class Function implements JSONAware {
private String functionString;

public Function() {
}

public Function(String functionString) {
this.functionString = functionString;
}

@Override
public String toJSONString() {
return this.functionString;
}

public String getFunctionString() {
return functionString;
}

public void setFunctionString(String functionString) {
this.functionString = functionString;
}

        public static void main(String[] args) {
Function click = new Function("function(){alert(1);}");
HashMap<String, Object> json = new HashMap<String, Object>();
json.put("name", "tony");
json.put("click", click);
String jsonString = JSON.toJSONString(json);
System.out.println(jsonString);
}
}
返回顶部
顶部