【问题标题】:Angularjs converting json data to "[object Object]"Angularjs 将 json 数据转换为“[object Object]”
【发布时间】:2016-10-28 05:52:45
【问题描述】:

我正在使用 Angular 资源进行 ajax 调用。我有一个更新事务,我从数据库中获取数据,同时获取数据数据是这样的:

现在在向该对象的空字段添加数据后,我再次将其发送到服务器,在发送到服务器之前,数据将被转换为不同的形式,如下所示:

可能的原因是什么?我已经使用过 JSON.parse();但它不起作用。

--编辑--

这是我将子对象转换为字符串的代码

            var serverResp = res.data;
            $scope.importLC.main.customerName = serverResp.customerName;
            $scope.importLC.main.customerAddress1 = serverResp.customerAddress1;
            $scope.importLC.main.customerAddress2 = serverResp.customerAddress2;
            $scope.importLC.main.customerAddress3 = serverResp.customerAddress3;
            $scope.importLC.main.issueDate = $filter('date')(new Date(), 'dd-MM-yyyy');

            serverResp = $scope.importLC;

            angular.forEach(serverResp, function (value, key) {
                angular.forEach(serverResp[key], function (v, k) {
                    if (typeof serverResp[key][k] === 'object') {
                        angular.forEach(serverResp[key][k], function (v1, k1) {
                            serverResp[key][k][k1] = String(serverResp[key][k][k1]);
                        });
                    } else {
                        serverResp[key][k] = String(serverResp[key][k]);
                    }
                });
            });

            $scope.importLC = serverResp;

我必须将值转换为字符串,但整个对象都被转换为字符串。

--编辑--

我明白了为什么要转换数据,实际上在将数据发送到服务器之前,我正在对数据进行验证,但验证文件只接受字符串值,所以我需要将数据转换为字符串,这是代码

        //Convert object to string
        function convertObjectToStringSingleObject(data) {
            Object.keys(data).forEach(function (key) {
                data[key] = String(data[key]);
            });
            return data;
        }

在同一个地方我还有一个功能:

    //Convert object to string
    function convertObjectToStringMultiLevelObject(data) {
        Object.keys(data).forEach(function (key) {
            Object.keys(data[key]).forEach(function (key1) {
                data[key][key1] = String(data[key][key1]);
            });
        });
        return data;
    }

现在如果我使用convertObjectToStringMultiLevelObject 函数,那么我的代码工作正常,但我的其他一些事务需要convertObjectToStringSingleObject。有什么方法可以将这两个函数(convertObjectToStringSingleObjectconvertObjectToStringMultiLevelObject)结合起来,并且组合函数应该足够智能以捕获对象的类型,我的意思是它可以是单级或多级 json 对象。

【问题讨论】:

  • 显示一些相关的javascript
  • 将对象转换为字符串会产生[object Object]。发生这种情况的原因有很多。我们需要从您那里查看更多代码,以准确确定您将子对象转换为字符串的时间点。

标签: javascript angularjs arrays string object


【解决方案1】:

在将对象转换为字符串时使用下面的函数

var str = JSON.stringify(obj);

在从 Stringified 对象转换为 Javascript 对象时使用

var obj  = JSON.parse(str);

编辑

如果值为对象,则使用JSON.stringify

    function convertObjectToStringSingleObject(data) {
        Object.keys(data).forEach(function (key) {
            if (typeof data[key] === "object") {
               data[key] = JSON.stringify(data[key]);
            } else {
               data[key] = String(data[key]);
            }

        });
        return data;
    }

【讨论】:

  • 我不想将整个对象转换为字符串我只想将 转换为字符串。
  • 您要转换的值是对象,这就是它作为“[object object]”出现的原因。
  • 是的,但是如果我使用convertObjectToStringMultiLevelObject 函数,那么代码现在可以正常工作了,我唯一的问题是我想要convertObjectToStringMultiLevelObjectconvertObjectToStringSingleObject 的组合函数,这样我的所有其他事务也可以完美运行。
  • 这可能是个问题,因为你可能不知道对象的深度有多少
  • 你需要创建递归函数
【解决方案2】:

在对这两个函数进行了一些研发之后,我创建了一个组合函数,它允许我将对象(不同级别的对象)值转换为字符串,在我的情况下,对象的最大深度为 2,因此该函数看起来像:

  function convertObjectToString(data) {
        Object.keys(data).forEach(function (key) {
            if (data[key] && typeof data[key] === 'object') {
                Object.keys(data[key]).forEach(function (key1) {
                    data[key][key1] = String(data[key][key1]);
                });
            } else if (data[key] && typeof data[key] === 'string' || typeof data[key] === 'number') {
                data[key] = String(data[key]);
            } else {
                data[key] = "";
            }

        });
        return data;
    }

我实现了我想要的,因为我知道我的对象的深层,但我总是欢迎一个能够检查深层并做出相应响应的函数。谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-18
    • 1970-01-01
    • 1970-01-01
    • 2014-09-09
    • 2019-05-08
    • 1970-01-01
    • 2012-12-27
    • 1970-01-01
    相关资源
    最近更新 更多