【问题标题】:Photoshop Scripting array to jsonPhotoshop 脚本数组到 json
【发布时间】:2018-08-27 09:55:38
【问题描述】:

我想获取 json 文档中的所有层。 这是我的代码:

#include json2.js
var doc = app.activeDocument;
var allLayers = [];
var allLayers = collectAllLayers(doc, allLayers);

function collectAllLayers (doc, allLayers){
    for (var m = 0; m < doc.layers.length; m++){
        var theLayer = doc.layers[m];
        if (theLayer.typename === "ArtLayer"){
            allLayers.push(theLayer);
        }else{
            collectAllLayers(theLayer, allLayers);
        }
    }
    return allLayers;
}
var json = JSON.stringify(allLayers);

alert(json);

我的努力 var json = JSON.stringify(allLayers); 不起作用。我想allLayers 改成json。 提前感谢您的帮助解答!

【问题讨论】:

  • 请提供 doc.layers 的内容示例,以便我们为您提供帮助。
  • 你能告诉我们var json = JSON.stringify(allLayers); 有什么问题吗?它会抛出错误吗? json 是空的吗?
  • 方法collectAllLayers(doc, allLayers);返回什么?
  • 代码在你的地方有效吗?我收到“出现一般 Photoshop 错误。此功能在此版本的 Photoshop 中可能不可用”

标签: javascript json photoshop


【解决方案1】:

JSON 不支持 Photoshop 使用的某些类型(例如 File),因此 JSON 化某些 Photoshop DOM 对象将不起作用。您需要修改 json2.js 或创建您自己的解析器来创建一个 jsonable 对象。

【讨论】:

  • 为什么 JSON 不支持它们?
  • 我不知道,我也不是程序员,无法弄清楚,这只是经验。 document 有大约 40 个属性,其中大约 25 个 JSON 会引发 TypeError,但是这些属性中的 typeof strings
  • @SergeyKritskiy 所以没有机会在我的代码中获取 json 文档中的图层?
  • 您需要手动将所有无法识别的数据转换为 jsonable 数据。例如,JSON 无法 JSONify artLayer.bounds 属性,因为这是一个在 json 中不可用的单位数组(像素、英寸)。所以我想你必须把它转换成一个数字数组,也许在另一个属性中写下单位。以此类推。
  • 如果您检查脚本指南wwwimages2.adobe.com/content/dam/acom/en/devnet/photoshop/pdfs/… 中的 ArtLayer 属性,您会注意到虽然一些属性是字符串和布尔值,但其中一些是 Document、LayerKind、TextItem 等,我想象一下,这些都需要转换为 jsonable 类型。
猜你喜欢
  • 2011-08-13
  • 2020-07-24
  • 2011-08-05
  • 1970-01-01
  • 2016-11-13
  • 2017-10-22
  • 1970-01-01
  • 1970-01-01
  • 2014-12-06
相关资源
最近更新 更多