JSON 在 ExtendScript / Indesign 中对整个对象进行字符串化

问题描述 投票:0回答:1

我正在为 InDesign 开发 CEP 插件。由于 jsx 不支持太多功能(ES3),我想将对象从 InDesign 导出到 javascript,然后在那里继续处理它们。为了能够做到这一点,我必须从插件发送 JSON,但是字符串化不起作用

这是一个 jsx 文件的示例,它应该返回图形线数组

#include './json2.jsx';

var objMain = {};
objMain.getLines = function () {
    var returnObject = [];
    // Loop through all graphic lines
    for (var i = 0; i < app.activeDocument.graphicLines.length; i++) {
        returnObject.push(app.activeDocument.graphicLines[i]);
    }

    return JSON.stringify(returnObject);
}

objMain.getLines();

但是当我运行它时,我从 json2 中得到了这个:

throw new TypeError("Converting circular structure to JSON");

我尝试迭代该对象来创建一个新对象,该对象仅包含没有函数和循环依赖关系的嵌套对象,但是如果我尝试使用“typeof”进行检查,我会得到“该属性在当前状态下不适用”。我尝试过很多种 ES3-flatten 方法,但没有运气

有人知道如何通过 jsx/CEP 获取(整个)对象 JSON 化吗?

我尝试循环遍历对象来消除循环依赖,但 CEP/ES3 中缺乏函数不允许太多

javascript adobe adobe-indesign extendscript
1个回答
0
投票

简短的回答是,InDesign 对象模型是高度循环的。为了实现您想要的目标,我建议从graphicLine对象中提取您需要的任何数据并将它们存储在您自己的JSON对象中。然后在接收端编写一个函数,使用恢复的数据创建新的图形线。

我强烈推荐这个网站来学习 InDesign 对象模型:

https://www.indesignjs.de/extendscriptAPI/indesign-latest/#about.html

© www.soinside.com 2019 - 2024. All rights reserved.