正在尝试分析After Effects脚本中的嵌套JSON文件



有人能告诉我这里做错了什么吗?我有一个json文件,我正在通过After Effects中的脚本进行解析,我不知道如何迭代json文件的部分。

我的json文件是:

{
"Timestamp": "20-Sep-2020 12:38:07.177",
"m11": 0.2202,
"m12": 0.8858,
"m13": 0.4085,
"m21": -0.9708,
"m22": 0.2399,
"m23": 0.0031,
"m31": -0.0952,
"m32": -0.3972,
"m33": 0.9128,
"qX": -0.13,
"qY": 0.1635,
"qZ": -0.6026,
"qW": -0.7702
},
{
"Timestamp": "20-Sep-2020 12:38:07.186",
"m11": 0.2204,
"m12": 0.8861,
"m13": 0.4078,
"m21": -0.9708,
"m22": 0.2401,
"m23": 0.0031,
"m31": -0.0952,
"m32": -0.3965,
"m33": 0.9131,
"qX": -0.1297,
"qY": 0.1632,
"qZ": -0.6026,
"qW": -0.7703
}

我的jsx文件是这样的:

#include "json2.js"
var file = new File;
var check = 0;
var mainWindow = new Window("palette", "File Reader", undefined);
mainWindow.orientatizzaaq1on = "column";
var groupOne = mainWindow.add("group", undefined, "groupOne");
groupOne.orientation = "row";
var fileLocBox = groupOne.add("edittext", undefined, "Selected File Location");
fileLocBox.size = [150, 20];
var getFileButton = groupOne.add("button", undefined, "File...");
getFileButton.helpTip = "Select a .json file to change the comp";
var groupTwo = mainWindow.add("group", undefined, "groupTwo");
groupTwo.orientation = "row";
var applyButton = groupTwo.add("button", undefined, "Apply");
mainWindow.center();
mainWindow.show();
getFileButton.onClick = function() {
file = file.openDlg("Open a file", "Acceptable Files:*.json");
fileLocBox.text = file.fsName;
check = 1;
}
applyButton.onClick = function() {
if(check == 0) {
alert("Please select a file");
return false;
} else {
//app.beginUndoGroup("Comp Changes");
var fileExtension = fileLocBox.text;
var fileData;

if(fileExtension.substring(fileExtension.length-4, fileExtension.length) == "json") {
fileData = readJson();

changeComp(fileData);
}
alert("done");
}
}
function readJson() {
var currentLine;
var jsonStuff = [];
file.open("r");
while(!file.eof) {
currentLine = file.readln();
jsonStuff.push(currentLine);
}
file.close();
jsonStuff = jsonStuff.join("");
var parsedJson = JSON.parse(jsonStuff);

return parsedJson;
}
function changeComp(data) {
var nullz = app.project.activeItem.layers.addNull();
nullz.threeDLayer = true;
nullz.name = "parent to me";
var size = Object.keys(data).length;
for (i = 0; i < size; i++) {
var temp =data[1].m11; 
var t =i/25;
nullz.xRotation.setValueAtTime(t, temp);
}
}

我有一种感觉,我的json文件可能需要不同的格式,这正是我从另一个应用程序中得到的。

因此,我们的想法是,它将遍历json文件;m11";值,将其应用于null的旋转,然后转到下一帧,获取下一个";m11";等等在我的脚本中,如果我只是说:

var temp =data.m11; 
var t =i/25;
nullz.xRotation.setValueAtTime(t, temp);

它起作用并将获取第一个"0"的值;m11";并将其应用于null对象。但如果我试图达到第二个";m11";通过说

var temp =data[1].m11;

var temp =data.m11[1];

它不起作用,所以只是想弄清楚我做错了什么?json的格式是这样的吗?json最初在末尾和开头都带有[],但如果将它们保留在中,则会导致脚本在尝试读取文件时崩溃,将它们取出会使其在某种程度上起作用,正如我上面提到的那样。

还是剧本?或者两者都有,我猜?

我无法重新创建您的确切环境,但您似乎删除了使json包含数组的方括号[]。如果你把它解析为一个数组,这会起作用:

function changeComp(data) {
var nullz = app.project.activeItem.layers.addNull();
nullz.threeDLayer = true;
nullz.name = "parent to me";
for (i = 0; i < data.length; i++) {
const value = data[i].m11;
const time = i / 25;
nullz.xRotation.setValueAtTime(time, value);
}
}

你能详细说明一下你的问题吗?当你写:

"但如果我试图达到第二个";m11";说(…(没有工作;

什么不起作用?错误代码是什么?阅读电脑上说的错误通常有助于发现错误!

这是我解析为数据的文件:

[
{
"Timestamp": "20-Sep-2020 12:38:07.177",
"m11": 0.2202,
"m12": 0.8858,
"m13": 0.4085,
"m21": -0.9708,
"m22": 0.2399,
"m23": 0.0031,
"m31": -0.0952,
"m32": -0.3972,
"m33": 0.9128,
"qX": -0.13,
"qY": 0.1635,
"qZ": -0.6026,
"qW": -0.7702
},
{
"Timestamp": "20-Sep-2020 12:38:07.186",
"m11": 0.2204,
"m12": 0.8861,
"m13": 0.4078,
"m21": -0.9708,
"m22": 0.2401,
"m23": 0.0031,
"m31": -0.0952,
"m32": -0.3965,
"m33": 0.9131,
"qX": -0.1297,
"qY": 0.1632,
"qZ": -0.6026,
"qW": -0.7703
}
]

最新更新