LUA:在嵌套表中添加值

LUA:在嵌套表中添加值,lua,nested,Lua,Nested,我的应用程序中存在性能问题。我想收集一些关于如何改进它的想法。这个应用程序非常简单:我需要在一个嵌套的表中添加值,以获得用户希望从所有待定付款中支付的总额。用户选择一系列付款,我计算他们将支付多少 这就是我所拥有的: jsonstr = "{ "name": "John", "surname": "Doe", "pending_payments": [ { "month": "january", "amount

我的应用程序中存在性能问题。我想收集一些关于如何改进它的想法。这个应用程序非常简单:我需要在一个嵌套的表中添加值,以获得用户希望从所有待定付款中支付的总额。用户选择一系列付款,我计算他们将支付多少

这就是我所拥有的:

jsonstr = "{    "name": "John",
    "surname": "Doe",
    "pending_payments": [
        {
            "month": "january",
            "amount": 50,
        },
        {
            "month": "february",
            "amount": 40,
        },
        {
            "month": "march",
            "amount": 45,
        },
    ]
}"

local lunajson = require 'lunajson'
local t = lunajson.decode(jsonstr)
local limit   -- I get this from the user
local total = 0;

for i=1, limit, 1 do 
    total = total + t.pending_payments[i].amount; 
end;

它起作用了。最后我得到了我需要的。然而,我注意到计算需要花费很多时间。每个JSON只有12笔待付款(每月一笔)。需要两到三秒的时间才能得出结果。我尝试了不同的机器和Lua5.1、5.2、5.3。结果是一样的

有谁能建议我如何更好地实现这一点


谢谢大家!

对于这个简单字符串,请尝试下面的测试代码,它直接从字符串中提取金额,而不使用json解析器:

jsonstr = [[{    "name": "John",
    "surname": "Doe",
    "pending_payments": [
        {
            "month": "january",
            "amount": 50,
        },
        {
            "month": "february",
            "amount": 40,
        },
        {
            "month": "march",
            "amount": 45,
        },
    ]
}]]

for limit=0,4 do
    local total=0
    local n=0
    for a in jsonstr:gmatch('"amount":%s*(%d+),') do
        n=n+1
        if n>limit then break end
        total=total+tonumber(a)
    end
    print(limit,total)
end

我发现延迟与LUA的计算无关。这与检索极限变量的可配置延迟有关

我在这里没有什么要分享的,因为这个问题实际上是一个外部因素


感谢@lfh的回复。

这不是有效的Lua代码。使用长字符串定义
jsonstr
.Hi@lhf。谢谢你的评论。代码中的内容用于说明。在实际应用程序中,一个JSON对象由lunajson.Hi@lhf解码成一个表。谢谢你的建议。我使用提供不同JSON对象的Web服务。我发布的是一个简短的版本,用于说明。实际的JSON对象实际上更长。然而,更重要的是,我在代码中的许多不同部分使用了这些信息,如果我能继续使用JSON解析器,这将真正帮助我。我在寻找Pelight库的替代方案,我认为有一个,但我真的不明白如何使用它(),我不是最有经验的开发人员。@Wilmar,试着在Lua邮件列表中询问:谢谢@lhf。我就这么做了。