javascript - JSON 数组未正确字符串化

标签 javascript angularjs json node.js mean-stack

在我的 Nodejs 站点中,我创建了一个 JSON 数组并将其发送到 angularJs 客户端。然后它显示为 [object, object]。由于这个原因,我现在使用 JSON.stringify,它在 angularJs 客户端中以一种奇怪的方式显示。

在 NodeJs 端创建数组,

getAttachments = function () {
        let attach = [];
        workflowSession.files.forEach(file => {
            if (file) {
                const item = {
                    text: file.name,
                    link: workflowSession.metadata.portalBaseUrl + "api/files/" + workflowSession.workflowRef + "@"+ file.name 
                }

                attach.push(item);
            }
        });

        return attach;
    };

当我将控制台日志放在 Nodejs 端时,它显示如下,

[ { text: 'sdee.png',
    link: 'http://localhost:3000/api/files/kYnDsXjyFT@sdee.png' },
  { text: 'wes.png',
    link: 'http://localhost:3000/api/files/kYnDsXjyFT@wes.png' } 
]

但在 AngularJs 客户端中显示为 [object, object],因此我对上面的数组创建方法进行了如下更改,

getAttachments = function () {
        let attach = [];
        workflowSession.files.forEach(file => {
            if (file) {
                const item = {
                    text: file.name,
                    link: workflowSession.metadata.portalBaseUrl + "api/files/" + workflowSession.workflowRef + "@"+ file.name 
                }

                attach.push(item);
            }
        });

        return JSON.stringify(attach);
    };

然后 NodeJs 端显示 console.log 的数据如下,

[
  {"text":"sdee.png","link":"http://localhost:3000/api/files/kYnDsXjyFT@sdee.png"},   {"text":"wes.png","link":"http://localhost:3000/api/files/kYnDsXjyFT@wes.png"}
]

但在 AngularJs 端显示如下,

[
{"text":"wes.png","link":"http://localhost:3000/api/files/saJiCDZPet@wes.png"},{"text":"ssdd.png","link":"http://localhost:3000/api/files/saJiCDZPet@ssdd.png"}
]

我想按照下面的 HTML 片段所示迭代此数组,但由于格式问题我无法这样做。 “action.links”是从 Nodejs 端创建的数组。

<md-menu-content>
  <md-menu-item ng-repeat="item in action.links" ng-if="item.link">
    <md-button href="{{item.link}}" target="_blank">
      {{item.text}}
    </md-button>
  </md-menu-item>
</md-menu-content>

我做错了什么?

最佳答案

看起来 Angular 端正在对 HTML 进行编码,您可以做的是通过 HTML 解码来运行它:

var htmlDecode = function(str) {
    var temp = document.createElement('span');
    temp.innerHTML = str;
    return temp.textContent;
};

var foo = '[{&#34;text&#34;:&#34;wes.png&#34;,&#34;link&#34;:&#34;http://localhost:3000/api/files/saJiCDZPet@wes.png&#34;},{&#34;text&#34;:&#34;ssdd.png&#34;,&#34;link&#34;:&#34;http://localhost:3000/api/files/saJiCDZPet@ssdd.png&#34;}]';

console.log(
    htmlDecode(foo)
);

理想情况下,您应该首先阻止它进行 HTML 编码。如果您能够共享代码的实时版本,则可以更轻松地调试发生这种情况的原因。

关于javascript - JSON 数组未正确字符串化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51776356/

相关文章:

javascript - 我应该如何在backbone.marionette中测试/监视此类事件

javascript - anchor 内的复选框

Python:将复杂的字符串字典从 Unicode 转换为 ASCII

javascript - 将字符串更改为数组

javascript - 如何从 ReSharper (javascript) 重命名重构(以及可能的其他操作)中排除文件夹?

javascript - 事件发生后 jQuery 不工作

javascript - while 循环时浏览器卡住(贪吃蛇游戏)

javascript - AngularJS Restful web 服务 : it doesn't take attributes from a json text

angularjs - 在 AngularJS 中创建 CRUD 服务的最佳实践

java - Android HttpClient 异步任务