将json转换为XML后对结果进行排序

Sort the result after converting json to XML

本文关键字:结果 排序 json 转换 XML      更新时间:2023-09-26

我有一个json文件,如:

"files": {
    "audio": {
        "number1": {
            "enabled": false,
            "priority": 5,
        },
        "number2": {
            "enabled": false,
            "priority": 1,
        },
        "number3": {
            "enabled": false,
            "priority": 2,
        }
    }
}

我用一些函数将json文件转换为xml还有这个函数:

function extractFile(data){
    // adding for loop to check priority number?
    var datas = [];
    var element = data.files.audio;
    datas.push({
        name : 'Num1',
        enabled : element. number1.enabled? "true":"false"
    });
    datas.push({
        name : 'Num2',
        enabled : element. number2.enabled? "true":"false"
    });
    datas.push({
        name : 'Num3',
        enabled : element. number3.enabled? "true":"false"
    });
    return datas;
}

输出为:

   <file name="Num1" enabled="false"/>
   <file name="Num2" enabled="false"/>
   <file name="Num3" enabled="false”/>

我如何根据json中的优先级编号来排序它们?

输出需要像这样:

   <file name="Num2" enabled="false"/>
   <file name="Num3" enabled="false"/>
   <file name="Num1" enabled="false”/>

您的代码中需要一个可以按顺序迭代data.files.audio的循环。这看起来像是一个对象而不是一个数组,所以尝试遍历对象属性来创建一个数组。

在JavaScript中,您将需要使用按字符串属性值排序对象数组的答案对data.files.audio数组进行排序。

编辑

function extractFiles(data) {
    var elements = [];
    var files = [];
    // create an array of your source data objects
    for (var property in data.files.audio) {
        if (data.files.audio.hasOwnProperty(property)) {
            var p = data.files.audio[property];
            p.name = property.toString();
            elements.push(p);
        }
    }
    // create function to sort object array by priority
    function compareFiles(a, b) {
        if (a.priority < b.priority) return -1;
        if (a.priority > b.priority) return 1;
        return 0;
    }
    // create data for xml from sorted object array
    for (var e in elements.sort(compareFiles)) {
        files.push({
            name: elements[e].name,
            enabled: elements[e].enabled ? "true" : "false"
        });
    }
    return files;
}