2017-07-23 6 views
1

Also habe ich eine Tabelle mit Lua und darin ist eine Variable, aber ich kann nicht herausfinden, wie man es wegen seines Namens erreicht. Ich konnte json.prettify(_id) verwenden, um zu sehen, was in der Tabelle ist. Alles, was ich will, ist die id innerhalb dieser Tabelle aber, weil, wie ich es bekommen kann nicht benannt ist scheinen, was in _id ist, habe ich versucht,Artikel in einer Tabelle Lua

_id[1] beide aber, dass == null
_id.$oid aber das gab mir einen Laufzeitfehler

gedruckte Antwort: _id = {
 "$oid":"597015b757203b04d6941d45"
}

interessantes Detail ist, dass #_id == 0

+0

Versuchen Sie 'local _, value = next (_id)' –

Antwort

3

Verwenden

tableName[ 'variableName' ] 

oder

tableName.variableName 

Hinweis: Manchmal kann man nicht beides Formular verwenden, zB:

tableName[ 'name with spaces' ] -- ok 

tableNames.name with spaces -- error 

Ich denke Operator # kann nicht mit nicht-indizierten Tabellen verwendet werden.

+0

Der '#' Operator zählt nur Elemente in der "Array" -Komponente der Tabelle, kann aber immer noch mit jeder Tabelle verwendet werden. Das bedeutet, dass '# ({5, 3, [" Item "] = true})' 2 zurückgibt, nicht 3, da Lua nur den Array-Teil der Tabelle zählt. – Stormswept

+0

Nochmals vielen Dank! Die erste Option funktionierte, das '$' - Symbol verursachte den Laufzeitfehler, als ich _id. $ Oid ausprobierte –

2

Sie benötigen JSON-String zu Lua-Tabelle dekodieren und Wert in irgendeiner Weise erhalten:

local json = require("json") 

local str = [[ { "$oid":"597015b757203b04d6941d45" } ]] 

local t_res= json.decode(str) 

-- access 
print(t_res["$oid"]) 
-- or 
local k,v = next(t_res) 
print(v) 
-- or 
for k, v in pairs(t_res) do 
    print(v) 
    break 
end 

PS: Lua Operator # nur für eine regelmäßige Anordnung, mit Nicht-Null-Werten.

0

Um die Tatsache zu überwinden, dass der Name der Variablen enthielt das ‚$‘ Symbol den richtigen Weg, um die Variable in der Tabelle zu erhalten war zu verwenden:

_id [ ‚$ oid‘], das funktionierte .

_id. $ Oid gab einen Laufzeitfehler.