在 deluge 脚本中访问特定的 JSON 值

Accessing specific JSON values in a deluge script

我有一个 JSON API 响应,其中包含多个条目、不同类型的订阅和多个用户。

我需要在列表中搜索“user_name”和“订阅”,然后 return 任何匹配的“持续时间”。在某些情况下,一个用户和订阅会有多个“持续时间”。当有多个时,我需要持续时间的总和。

例如,这是我正在使用的示例 Json 的一部分:

[
    {
        "id": 139387026,
        "user_name": "John Smith",
        "note": "",
        "last_modify": "2022-03-28 14:16:35",
        "date": "2022-03-28",
        "locked": "0",
        "addons_external_id": "",
        "description": "",
        "info": [
            {
                "subscription": "basic",
                "duration": "22016",
            }
        ]
    },
    {
        "id": 139387027,
        "user_name": "John Smith",
        "note": "",
        "last_modify": "2022-03-28 14:16:35",
        "date": "2022-03-28",
        "locked": "0",
        "addons_external_id": "",
        "description": "",
        "info": [
            {
                "subscription": "advanced",
                "duration": "10537",
            }
        ]
    },
    {
        "id": 139387028,
        "user_name": "Martin Lock",
        "note": "",
        "last_modify": "2022-03-28 14:16:35",
        "date": "2022-03-28",
        "locked": "0",
        "addons_external_id": "",
        "description": "",
        "info": [
            {
                "subscription": "basic",
                "duration": "908",
            }
        ]
    },
]
 

例如,对于 user_name:“John Smith”和订阅:“高级”,我需要 return 持续时间:“10537”。

我曾经Jsonlist();转换它,然后使用下面的代码,但它 returns 列表中的所有值。我不知道如何搜索特定值或将匹配的条目添加在一起。

rows = subscriptions.toJsonlist();
for each  row in rows
{
    info row;
    user_name = row.getJson("user_name");
    info "username: " + user_name;
    subscription = row.getJson("subscription");
    info "subscription: " + subscription;
    subscriptionId = row.getJson("subscriptionId");
    info "subscription Id: " + subscriptionId;
}

我对编程还很陌生。感谢您的帮助!

根据您的需要,您希望过滤您的 JSON 数据并从您在 user_name 和订阅中的过滤器中获取相应的值。 这是 Deluge 脚本。我使用清晰的变量名,这样你就不会混淆了。

//Your Entry Change this based on your filter
input_user_name = "John Smith";
input_subscription = "advanced";


//Your JSON data
json_string_data = '[ { "id": 139387026, "user_name": "John Smith", "note": "", "last_modify": "2022-03-28 14:16:35", "date": "2022-03-28", "locked": "0", "addons_external_id": "", "description": "", "info": [ { "subscription": "basic", "duration": "22016", } ] }, { "id": 139387027, "user_name": "John Smith", "note": "", "last_modify": "2022-03-28 14:16:35", "date": "2022-03-28", "locked": "0", "addons_external_id": "", "description": "", "info": [ { "subscription": "advanced", "duration": "10537", } ] }, { "id": 139387028, "user_name": "Martin Lock", "note": "", "last_modify": "2022-03-28 14:16:35", "date": "2022-03-28", "locked": "0", "addons_external_id": "", "description": "", "info": [ { "subscription": "basic", "duration": "908", } ] } ]';
//Declare the data as JSON
processed_json_data = json_string_data.toJsonlist();


initial_total_duration = 0;//Donot change this
list_of_duration = List();
total_duration_per_username_per_subscription = Map();
for each row in processed_json_data
{
    if (row.get("user_name") == input_user_name )
    {
        info_list = row.get("info").toJSONList();
        for each info_row in info_list
        {
            if (info_row.get("subscription") == input_subscription)
            {
                info_row_duration = info_row.get("duration").toLong(); // make it integer
                list_of_duration.add(info_row_duration);
            }
        }
    }
}
result_map = Map();
//Sum of list_of_duration
for each duration in list_of_duration
{
    initial_total_duration = initial_total_duration + duration;
}
result_map.put("user_name",input_user_name);
result_map.put("subscription",input_subscription);
result_map.put("no_of_subscription",list_of_duration.size());
result_map.put("total_duration",initial_total_duration);
info result_map;

结果应该是

{"user_name":"John Smith","subscription":"advanced","no_of_subscription":1,"total_duration":10537}

您可以在 https://deluge.zoho.com/tryout 中测试这些脚本。

谢谢, 冯