Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 定义JavaPOJO,使Gson不会写入双引号的值_Javascript_Java_Gson - Fatal编程技术网

Javascript 定义JavaPOJO,使Gson不会写入双引号的值

Javascript 定义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"

注意:这个例子是javascript

<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}
      ]
    }
  ]
}