2010-11-24 2 views
-1

ich einige Objekt mit json machen:Schienen Rendern JSON -> Square Brakets?

def index 
    if user_signed_in? 
    @todos = current_user.todos.find_all() 
    render :json => @todos 
    else 
    return nil 
    end 
end 

es tatsächlich tut das, aber es gibt ein Problem. Ich bekomme quadratische Klammern [] rund um den JSON-Ausgang und einige Plugins oder JSON-Viewer können sie deshalb nicht lesen. Hier einige Beispielausgabe:

[{"todo":{"name":"Test todo","created_at":"2010-11-24T07:40:07Z","updated_at":"2010-11-24T07:40:07Z","done":0,"id":1,"user_id":1}},{"todo":{"name":"Ali Test","created_at":"2010-11-24T07:40:30Z","updated_at":"2010-11-24T07:40:30Z","done":0,"id":2,"user_id":1}}] 

danke im Voraus!

+1

find_all gibt ein Array zurück, das ist genau der JSON, den Sie erwarten sollten. – aceofspades

+0

Ahhh okay. also wie kann ich alle einträge mit tatsächlich diese array brakets machen? – Tronic

+0

'@ todos.each {| t | t.to_json} 'gibt Ihnen ein Array von Json-Objekten, die Sie getrennt darstellen können. – aceofspades

Antwort

0

Haben Sie es versucht?

render :json => @todos.to_json 
+0

einige output ..... – Tronic

0

Um die JSON-Ausgabe zu erhalten, die Sie erwarten, müssen Sie einen Hash und kein Array rendern. Hier ist eine eingehende Post auf Umwandeln:

What is the best way to convert an array to a hash in Ruby

Kurze Zusammenfassung mit OP Syntax:

render :json => Hash[*@todos.flatten] 

oder für eine asymmetrische Anordnung

render :json => Hash[@todos.map {|key, value| [key, value]}] 

In einigen Fällen, obwohl dies fügt zusätzliche Nullen hinzu, die Sie nicht möchten, und Sie müssen Ihr Array möglicherweise abbrechen und reduzieren oder einfach Hash [statt [wann immer möglich.