Javascript 尝试在After Effects脚本中解析嵌套的JSON文件
有人能告诉我我做错了什么吗?我有一个json文件,我正在通过After Effects中的脚本进行解析,我不知道如何迭代json文件的部分 我的json文件是:Javascript 尝试在After Effects脚本中解析嵌套的JSON文件,javascript,json,parsing,adobe,after-effects,Javascript,Json,Parsing,Adobe,After Effects,有人能告诉我我做错了什么吗?我有一个json文件,我正在通过After Effects中的脚本进行解析,我不知道如何迭代json文件的部分 我的json文件是: { "Timestamp": "20-Sep-2020 12:38:07.177", "m11": 0.2202, "m12": 0.8858, "m13": 0.4085, "m21&q
{
"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);
}
}
它工作并将获取第一个“m11”的值并将其应用于null对象。
但是如果我想说第二个“m11”
var temp =data[1].m11;
或
它不起作用,所以只是想找出我做错了什么?
这是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);
}
}
我认为这可能是您如何读取json文件的问题。这可能是有帮助的,尽管我不确定它增加了什么-他们给出的例子是我已经能够完成的,从第一组{}中读取,他们没有第二组{},或者解释了如何定位第二组。我不确定在哪里可以找到错误代码?在After Effects中,控制台在哪里?它不会完成脚本,不会像预期的那样将数据添加到旋转中,也不会给出“完成”的弹出警告。我很确定我已经用[]试过了,但数据[I].m11不起作用。。你是说你认为应该这样写,这行写得对吗?我不确定向“数据”中添加[I]是否正确。@BrianWilliams Yupp如果你用数组解析json,它将与我发布的代码一起工作,我会测试它。如果AE中没有错误代码,您可以记录沿途的数据,以便查看程序正在执行的操作。在解析数据后添加
Alert(JSON.stringify(data))
可以让您看到程序是如何解析JSON文件的。
var temp =data.m11[1];
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);
}
}
[
{
"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
}
]