Javascript 尝试在After Effects脚本中解析嵌套的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

有人能告诉我我做错了什么吗?我有一个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);
      }
  }
它工作并将获取第一个“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
    }
]