2009-06-09 7 views
2

Die Standardmethode in Schienen Ausgabe JSON ist soetwas wie:
Code:
render :json => friends.to_json(:only => [:username, :avatar_file_name, :id ])Output JSON-Array ohne den Klassennamen in jedem Array-Element

Ausgabe

 
{"friends" : 
    [{"user": 
    {"avatar_file_name": "image1.jpg", "username": "user1", "id": 1}}, 
    {"user": 
    {"avatar_file_name": "image2.jpg", "username": "user2", "id": 2}}, 
    {"user": 
    {"avatar_file_name": "image3.jpg", "username": "user3", "id": 3}} 
    ]} 

Aber ich möchte etwas wie:

Die Klasse wird durch den Array-Namen angegeben.
Last.fm verwendet auch diese Syntax Last.fm 'API-user.getfriends' siehe

+0

Tipp: Verwenden Sie http://json.bloople.net/ für eine schöne visuelle Darstellung des JSON-Arrays. – FGeertsema

Antwort

12

die Lösung für dieses Problem, die Linie kommentiert
ActiveRecord::Base.include_root_in_json = true
in initializers/new_rails_defaults.rb

Oder Einstellung ActiveRecord::Base.include_root_in_json auf false.

+1

gibt es keine Lösung, um nur eine Funktion zu erfüllen?Da dies andere JSON-Aufrufe unterbrechen würde, die bereits in der App –

+0

vorhanden sind, fügen Sie einfach root: nil zu Ihrem Render-Aufruf im Controller hinzu –

0

Sie Javascript, es neu zu formatieren können:

var json = 
{ 
    "friends" : 
    { "user": [] } 
} 

var i = 0; 
for (x in friends) 
{ 
    json.friends.user[i].avatar_file_name = x.user.avatar_file_name; // add more fields. 
    i++; 
} 

Etwas unter diesen Zeilen.

+0

Die Ausgabe wird in einer iPhone App verwendet. Die Ausgabe wird also nicht über Javascript geparst, sondern direkt in Objective-C-Objekte konvertiert. Ich möchte die richtige JSON-Datei direkt von den Schienen. Danke für deine Antwort. – FGeertsema

+0

Kein Problem. Jederzeit. –

0

JSON wird normalerweise verwendet, um Objekte in einem Textformat darzustellen.

Wenn Sie also die zweite Ausgabe möchten, müssen Sie Ihre Objekte ändern.

Die erste Ausgabe sagt: gibt es eine Freunde Objekt, das ein Array von Benutzer hat jeder Benutzer einige Eigenschaften, unter denen Sie wählen Benutzername, avatar_file_name, id

Die zweite aussetzen Ausgabe sagt: eine ist Freunde Objekt, das einen Benutzer Objekt enthält, die ein Array von unbenannte Objekte ist, von denen jede unbenannte Objekte hat einige Eigenschaften ...

Diese zweite Ausgabe ist in der JSON-Syntax nicht beschreibbar.

Es könnte sein:

{"friends" : 
    {"user": [ 
     ["avatar_file_name", "username", "id"], 
     ["image1.jpg", "user1", 1], 
     ["image2.jpg", "user2", 2], 
     ["image3.jpg", "user3", 3] 
    ]} 
} 

Dies sagt: ein Freunde ist Objekt, das einen Benutzer Objekt enthält, die ein Array von Array (eine Tabelle mit Feldnamen in der ersten Reihe). ..

+0

Ich glaube, du liegst falsch bei der zweiten Ausgabe. –

+0

Last.fm verwendet auch die gleiche Syntax wie meine zweite Ausgabe. Siehe bearbeitete Frage. – FGeertsema