如何正确解析 JSON 表以用于 Value 函数?

Posted

技术标签:

【中文标题】如何正确解析 JSON 表以用于 Value 函数?【英文标题】:How to properly parse a JSON table for use in a Value function? 【发布时间】:2022-01-17 11:43:07 【问题描述】:

我已经失败了好几次,无法使用 httpservice 成功地从我的服务器中提取信息以用于我正在开发的 Roblox 游戏。经过多次失败的努力,我发现主要问题是我无法解析表以从 JSON 表中获取我需要的值,也就是说,我想,为什么我不能让 Currency Handler 脚本接受价值。

我有一个 Ubuntu 服务器服务和一个叫做 Putty 的东西来访问它。

我已经做了足够多的试验和错误,相信处理程序脚本按预期工作,只是没有正确接收下一个脚本的信息。

game.Players.PlayerAdded:Connect(function(player)
    local value = Instance.new("NumberValue", player)
    value.Name = "Currency"
    value.Value = 0
    
    local HttpService = game:GetService("HttpService")
    local userID = '0' --player.UserId
    local wallet = "http://x8/"


    local mining = wallet..userID
    local response = HttpService:GetAsync(mining, HttpService:JSONDecode(), Enum.HttpContentType.ApplicationJson)
    local a,b,c,d = table.remove(response)
    local function f()
        value.Value = 1
    
    end

    
end)

我还运行了一个类似这样的本地脚本。

local player = game.Players.LocalPlayer

player:WaitForChild("Currency").changed:Connect(function(value)
    script.Parent.Currency.Text = "D "..value
end)

script.Parent.Currency.Text = "D "..player:WaitForChild("Currency").Value

这是在阅读了 Piglet 的各种手册之后。

我不是专业的程序员或软件工程师。除了从 youtube 和一些在线教程中收集到的信息外,我对编程知之甚少。我已经尽可能地利用这些资源。具有讽刺意味的是,我认为这应该是我实现获得可运行的 Roblox 游戏目标的最后一个主要障碍。我使用过 Wiki 和 Roblox 开发者论坛,但我并不完全了解它们。

【问题讨论】:

最后几行的目的是什么?我无法理解它。 json 解码函数通常将 json 字符串转换为表格。它通常应该抱怨你在里面放了一张桌子。此外,您对所有操作的结果都没有做任何事情,所以我想知道您认为这里会发生什么。请添加几个cmets 你想在第二个 sn-p 中做什么?我不知道local t 应该代表什么,也不知道它的目的。 response 给出了什么数据,有什么意义? 您可以尝试向自己解释第二个脚本的每一行的含义和效果。只是为了让您完全了解正在发生的事情。 Piglet 是对的,它应该崩溃,decode 需要一个 json 字符串。 我希望能够向自己解释代码,但我不知道其中的任何含义。我的问题是我正在查看教程并尝试从那些教程中找到我认为可能有用的东西。我真的不知道它有什么作用或意味着什么。我想要做的是从服务器获取 JSON 并解析出该字符串中最后一个元素的数量。 我认为我对最后一行代码中的所有内容所做的是告诉 JSON 函数将信息放入该表中。我可以查看服务器上的信息,但我不知道如何解析,当我想要的只是最后一条信息时,我找不到如何从 JSON 中获取一个元素。 【参考方案1】:

我能够使用上面的代码生成一个表,但 table.remove 仍然无法正常工作。我会尝试纠正这个问题,这是我想出的代码



        local mining = wallet..userID
        local response
        local data
        
        response = HttpService:GetAsync(mining)
        data = HttpService:JSONDecode(response, Enum.HttpContentType.ApplicationJson)
    local a = Instance.new("NumberValue", player)
    
    
    a = (data["result"]["amount"])
    
    
    
    print(data["result"]["amount"])

    print(a)
    
    
        value.Value = a
        print(value.Value)
        return value
        end)

不确定这是否是正确的做事方式,但它确实有效。

【讨论】:

您能否举例说明dataresponse 在您的情况下会是什么样子?我不认为 table.remove(yourTableHere, Position) 是你要找的。​​span> 解决方案已经彻底改变。 我相信你不需要创建一个NumberValue。你可以简单地做local a = data.result.amount。 HttpService:JSONDecode(jsonText) 也有 1 个参数,因此请移除 Enum.HttpContentType.ApplicationJson(之前的情况)。

以上是关于如何正确解析 JSON 表以用于 Value 函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 BigQuery 的列中解析 JSON 文件

python json快速解析命令

如何在几个键相等的情况下使用 Python 正确解析嵌套的 json

如何在PHP中解析json

如何正确运用PHP json

如何正确运用PHP json_encode函数进行中文转换