Я хочу получить все слои в 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.
Заранее благодарим за помощь и ответы!
Можете ли вы сказать нам, что не работает с var json = JSON.stringify(allLayers);
, выдает ошибку? json
пуст?
Что возвращает метод collectAllLayers(doc, allLayers);
?
Код работает у вас? Я получаю сообщение «Произошла общая ошибка Photoshop. Эта функция может быть недоступна в этой версии Photoshop»
Некоторые типы, которые использует Photoshop, не поддерживаются JSON (например, File
), поэтому использование JSON для некоторых объектов Photoshop DOM работать не будет. Вам нужно будет изменить json2.js
или создать собственный синтаксический анализатор, который создаст объект jsonable.
почему JSON их не поддерживает?
Я не знаю, и я недостаточно программист, чтобы понять это, это просто из опыта. document
имеет около 40 свойств, и примерно на 25 из них JSON выдает ошибку TypeError, однако typeof
из этих свойств - это strings
.
@SergeyKritskiy Значит, в моем коде нет шансов получить слои в json документе?
Вам нужно будет вручную преобразовать все нераспознаваемые данные в данные jsonable. Например, JSON не поддерживает свойство JSONify artLayer.bounds
, потому что это массив единиц (пикселей, дюймов), которые недоступны в json. Думаю, вам придется преобразовать его в массив чисел и, возможно, записать единицы в другом свойстве. И так далее.
если вы проверите свойства ArtLayer в руководстве по сценариям wwwimages2.adobe.com/content/dam/acom/en/devnet/photoshop/pd fs /…, вы заметите, что, хотя некоторые из свойств являются строками и логическими значениями, некоторые из них являются Document, LayerKind, TextItem и т. д., я полагаю, что их требуется преобразовать в типы jsonable .
Пожалуйста, предоставьте пример содержания doc.layers, чтобы мы могли вам помочь.