Jquery:在解析JSON期间自动进行类型转换。

8 浏览
0 Comments

Jquery:在解析JSON期间自动进行类型转换。

是否有一种方法可以在解析Json时指定类型,以便自动进行转换。

所以我有jsonData,x和y的值需要是数字。所以,我唯一能想到的办法是循环并进行转换。是否有更好的逻辑或更高效的方法?

0
0 Comments

JQuery: 在解析JSON时自动进行类型转换的原因及解决方法

在使用JQuery中的`$.parseJSON()`函数解析JSON数据时,有时会遇到自动进行类型转换的问题。这种情况下,JSON中的数字会被自动转换为JavaScript的number类型,而不是保留其原本的字符串形式。这可能会导致一些意想不到的问题,特别是当JSON中的数字被用作字符串进行比较或其他操作时。

为了解决这个问题,有几种方法可以尝试。以下是两种常见的解决方法:

1. 使用正则表达式进行替换:

在问题描述中,有一个代码示例使用了正则表达式来替换JSON字符串中数字的引号。这个方法的思路是将数字两侧的引号去除,以避免JQuery自动进行类型转换。示例代码如下:

var chartData = $.parseJSON(rawData.replace(/"(-?\d)/g, "$1").replace(/(\d)"/g, "$1"));

这个正则表达式会匹配JSON字符串中的数字,并将其两侧的引号去除,从而避免了类型转换。

2. 使用PHP的JSON_NUMERIC_CHECK选项:

如果JSON数据是通过AJAX从PHP代码中返回的,我们可以在PHP代码中使用`json_encode`函数,并设置`JSON_NUMERIC_CHECK`选项来解决这个问题。这个选项会将JSON中的数字保留为字符串形式,而不会进行类型转换。示例代码如下:

echo json_encode($data, JSON_NUMERIC_CHECK);

通过在`json_encode`函数中添加`JSON_NUMERIC_CHECK`选项,即可保留JSON中的数字为字符串,避免了类型转换。

这些解决方法会将JSON中的数字保留为字符串形式,从而避免了自动类型转换带来的问题。但需要注意的是,如果JSON中存在需要被视为字符串处理的看似数字的数据,那么需要根据具体情况进行进一步处理。

总之,当使用JQuery解析JSON数据时,如果希望保留JSON中的数字为字符串而不进行自动类型转换,可以尝试使用正则表达式进行替换或在PHP代码中使用JSON_NUMERIC_CHECK选项。这些方法能够有效解决由于自动类型转换带来的问题,确保数据的准确性和一致性。

0
0 Comments

问题的原因是在解析JSON数据时,字符串类型的数据没有自动转换为数字类型。解决方法是通过循环遍历JSON数据,将找到的字符串类型的数据使用parseInt("2");进行转换为数字类型。

0
0 Comments

Jquery: 解析JSON期间的自动类型转换

在上述内容中提到的问题是,jsonData变量中的JSON数据不是有效的。只有属性应该在双引号内。无论何时将数据转换为JSON格式,都要使用解析器(在json.org上有详细说明),不要手动编写。您可以使用工具(如JSONLint)来验证JSON是否有效。

任何数字(整数、小数、浮点数)都是有效的JSON数据类型,不需要用双引号括起来。

这是有效的JSON示例:[{"x": 1, "y": 2}, {"x": 3, "y": 4}]

然而,如果您无法控制源代码并通过ajax检索JSON数据,可以为dataFilter选项提供回调函数。如果您使用的是jQuery 1.5,则还可以使用converters,它们是通用的dataFilter回调函数。

我怀疑x和y坐标可能是小数,所以我选择在下面的示例中使用parseFloat而不是parseInt

使用dataFilter回调函数的示例(jQuery 1.5之前):

$.ajax({
    url: "/foo/",
    dataFilter: function(data, type){
        if (type == "json") {
            var json = $.parseJSON(data);
            $.each(json, function(i,o){
                if (o.x) {
                    json[i].x = parseFloat(o.x);
                }
                if (o.y) {
                    json[i].y = parseFloat(o.y);
                }
            });
        }
        return data;
    },
    success: function(data){
        // data现在应该是带有x和y的浮点数
    }
});

使用converter的示例(jQuery 1.5或更高版本):

$.ajaxSetup({
    converters: {
        "json jsoncoords": function(data) {
            if (valid(data)) {
                $.each(data, function(i,o){
                    if (o.x) {
                        data[i].x = parseFloat(o.x);
                    }
                    if (o.y) {
                        data[i].y = parseFloat(o.y);
                    }
                });
                return data;
            } else {
                throw exceptionObject;
            }
        }
    }
});
$.ajax({
    url: "/foo/",
    dataType: "jsoncoords"
}).success(function(data){
    // data现在应该是带有x和y的浮点数
});

感谢您详细的回答。如果您不使用ajax,希望您能够使用上述代码的一部分来获得所需的结果。祝您愉快的瓦尔普吉斯之夜!

0