Javascript 定义JavaPOJO,使Gson不会写入双引号的值
注意:这个例子是javascriptJavascript 定义JavaPOJO,使Gson不会写入双引号的值,javascript,java,gson,Javascript,Java,Gson,注意:这个例子是javascript <html> <head> <script type="text/javascript"> window.onload = function () { var chart = new CanvasJS.Chart("chartContainer", { title: { text: "Using labelFormatter function of axisY"
<html>
<head>
<script type="text/javascript">
window.onload = function () {
var chart = new CanvasJS.Chart("chartContainer",
{
title: {
text: "Using labelFormatter function of axisY"
},
axisY:{
labelFormatter: function(e){
return "Y: " + e.value;
}
},
data: [
{
type: "spline",
dataPoints: [
{ y: 5 },
{ y: 9 },
{ y: 17 },
{ y: 32 },
{ y: 22 },
{ y: 14 },
{ y: 25 },
{ y: 18 },
{ y: 20 }
]
}
]
});
chart.render();
}
</script>
<script type="text/javascript" src="/assets/script/canvasjs.min.js"></script>
</head>
<body>
<div id="chartContainer" style="height: 300px; width: 100%;"></div>
</body>
</html>
window.onload=函数(){
var chart=new CanvasJS.chart(“chartContainer”,
{
标题:{
文字:“使用axisY的labelFormatter函数”
},
axisY:{
labelFormatter:函数(e){
返回“Y:+e.值;
}
},
数据:[
{
类型:“样条曲线”,
数据点:[
{y:5},
{y:9},
{y:17},
{y:32},
{y:22},
{y:14},
{y:25},
{y:18},
{y:20}
]
}
]
});
chart.render();
}
因此,labelFormatter字段的值不是双引号,如果我将其修改为双引号,则代码不起作用
我不明白Javascript的规则,什么时候应该/不应该双引号,但似乎函数不能
我试图使用Gson从Java生成这样的代码,如何创建我的POJO,以便在输出到json时它的值不会被双引号引用。目前它只是被定义为类型字符串,因此得到双引号
e、 g
公共类AxisY
{
私有布尔反转;
私有int labelMaxWidth;
私有布尔labelWrap;
私有字符串标题;
private int viewportMinimum=0;
私有int视口最大值;
私有整数间隔;
私有字符串标签格式;
公共布尔值isReversed()
{
反向返回;
}
公共void setReversed(布尔值反转)
{
这是颠倒的;
}
public int getLabelMaxWidth()
{
返回labelMaxWidth;
}
公共void setLabelMaxWidth(int labelMaxWidth)
{
this.labelMaxWidth=labelMaxWidth;
}
公共布尔值isLabelWrap()
{
返回标签纸;
}
公共void setLabelWrap(布尔labelWrap)
{
this.labelWrap=labelWrap;
}
公共字符串getTitle()
{
返回标题;
}
公共无效集合标题(字符串标题)
{
this.title=标题;
}
public int getViewportMinimum()
{
返回视口最小值;
}
公共无效setViewportMinimum(int viewportMinimum)
{
this.viewportMinimum=viewportMinimum;
}
public int getViewportMaximum()
{
返回视口最大值;
}
public void setViewportMaximum(int viewportMaximum)
{
this.viewportMaximum=viewportMaximum;
}
公共整数getInterval()
{
返回间隔;
}
公共无效设置间隔(整数间隔)
{
这个。间隔=间隔;
}
公共字符串getLabelFormatter()
{
返回标签格式;
}
公共void setLabelFormatter(字符串labelFormatter)
{
this.labelFormatter=labelFormatter;
}
}
window.onload=函数(){
var chart=new CanvasJS.chart(“chartContainer”,
{
标题:{
文字:“使用axisY的labelFormatter函数”
},
axisY:{
labelFormatter:函数(e){
返回“Y:+e.值;
}
},
数据:[
{
类型:“样条曲线”,
数据点:[
{y:5},
{y:9},
{y:17},
{y:32},
{y:22},
{y:14},
{y:25},
{y:18},
{y:20}
]
}
]
});
chart.render();
}
Gson正在将Java POJO序列化为JSON。JSON不支持函数值。JSON支持的值类型有对象、数组、字符串、布尔值和数字。Gson正在将Java POJO序列化为JSON。JSON不支持函数值。JSON支持的值类型有object、array、string、boolean和number。您可以按原样发送JSON双引号,并在那里使用此库
您可以像预期的那样发送JSON双引号,然后使用这个库
将labelFormatter函数作为字符串传递,在js中,需要在值中输入一个eval,如下所示:
labelFormatter: eval("("+ <yourFunctionAsString> +")");
labelFormatter:eval(“+”);
将labelFormatter函数作为字符串传递,在js中,您需要在值中输入一个eval,如下所示:
labelFormatter: eval("("+ <yourFunctionAsString> +")");
labelFormatter:eval(“+”);
我不明白Javascript的规则,什么时候应该/不应该双引号,但似乎函数不能
您混合了JavaScript代码和JavaScript对象表示法(JSON)。JSON中不存在函数(请参见its),后者只负责数据持久性/传输(也正是这一点)。因此,Gson将所有字符串都视为字符串文本——这就是为什么您得到包含要转义的字符串的函数。这就是它的工作方式
安全问题
我不推荐的另一件事是直接在JSON中传输JavaScript代码。这显然是一个安全问题。我最好将labelFormatter
值作为一个简单的名称传递,以便让前端代码按名称获取适当的函数(如果有人将labelFormatter
作为function(){stealSessionCookies();}
?)发送该怎么办。说
(来自服务器)
(客户处类似的情况)
如果你仍然相信要用Gson做这件事
无论出于什么原因,您仍然需要在服务器端生成这些东西,那么您可以调整Gson以发出“更像JavaScript”的代码
最终类图表数据{
最后的T
labelFormatter: eval("("+ <yourFunctionAsString> +")");
{
"axisY": {
"labelFormatterStyleName": "y-by-name"
}
}
var labelFormatterStyles = {
"y-by-name": function(e) {
return "Y: " + e.value;
}
}
var chartConfiguration = { // or something more JS-idiomatic to avoid field-by-field assignments
// I didn't write in JS for long time
axisY: {
labelFormatter: labelFormatterStyles[serverResponse.labelFormatterStyleName]
}
};
new CanvasJS.Chart("chartContainer", chartConfiguration);
{
"title": {
"text": "Using labelFormatter function of axisY"
},
"axisY": {
"labelFormatter": function(e) { return "Y: " + e.value; }
},
"data": [
{
"type": "spline",
"dataPoints": [
{"y": 5.0},
{"y": 9.0},
{"y": 17.0},
{"y": 32.0},
{"y": 22.0},
{"y": 14.0},
{"y": 25.0},
{"y": 18.0},
{"y": 20.0}
]
}
]
}