2016-03-31 5 views
0

Ich verwende den Koala-Edelstein, um Facebook abzufragen. Die folgende Abfrage ergibt eine Zeichenfolge? von Hashes. Zum Beispiel:Facebook Query Ergebnis ist eine Zeichenfolge von Hashes

@graph.get_object("search?q=holden&type=page&limit=5") 

Wenn ich Reihe von Hashes sagen, sieht das Ergebnis ungefähr so:

{"name"=>"Holden", "category"=>"Cars", "id"=>"5730024897"} 
{"name"=>"Holden, Massachusetts", "category"=>"City", "category_list"=>[{"id"=>"224455390913969", "name"=>"City"}], "id"=>"104015212968818"} 
{"name"=>"Holden, Maine", "category"=>"City", "category_list"=>[{"id"=>"224455390913969", "name"=>"City"}], "id"=>"112517345426169"} 
{"name"=>"Holden, Missouri", "category"=>"City", "category_list"=>[{"id"=>"224455390913969", "name"=>"City"}], "id"=>"107921245894576"} 
{"name"=>"Holden, Louisiana", "category"=>"City", "category_list"=>[{"id"=>"224455390913969", "name"=>"City"}], "id"=>"111960155481686"} 

Es gibt keine Kommas zwischen dem Hashes, und natürlich sind einige der Werte selbst Hashes .

Der Versuch, JSON.parse zu tun, wie es ist, gibt einen JSON-Fehler, da es JSON nicht gut gebildet ist. Also denke ich, dass ich dies analysieren kann, indem ich nur die öffnenden und schließenden Zahnspangen beobachte, aber bevor ich das Rad neu erfinde und wahrscheinlich ein klobiges hier, habe ich mich gefragt, ob es etwas kühles Rubin gibt. Kann ich irgendwie einen Hash chompen? oder...?

Wir freuen uns geblendet zu werden!

+0

können Sie die genaue "Zeichenfolge der Hashes", die es zurückgibt, posten? –

+0

@Juan Manuel Rodulfo Salcedo - Ich habe die Frage bearbeitet, um eine echte FB-Ausgabe zu zeigen. Allerdings bin ich nicht wirklich auf eine brutale Art und Weise, dies zu lesen, da es nicht so schwierig ist. Ich war wirklich nur herumwandern, wenn es einen cleveren Rubin-Einliner gibt? – grooble

+1

Die API gibt einen gültigen JSON zurück (was Sie leicht bestätigen können, indem Sie 'https://graph.facebook.com/search?q=holden&type=page&limit=5&access_token= {add_a_valid_token_hier}' direkt in Ihrem Browser aufrufen. Der Name des Methode, die Sie verwenden, ist 'get_object' - also würde ich annehmen, dass es ein Objekt bereits zurückgibt, was bedeutet, eine Ruby-Datenstruktur irgendeiner Art. Wahrscheinlich haben Sie sich von der Methode, die Sie verwendet haben, um diese Debug-Ausgabe (?) – CBroe

Antwort

1

ich weiß nicht, einen besseren Weg auf sympatische Weise so viele Transformationen zu tun ..

Wenn Ihr String ist, wie ich es aus dem Code kopiert:

[68] pry(main)> string 
=> "{\"name\"=>\"Holden\", \"category\"=>\"Cars\", \"id\"=>\"5730024897\"}\n{\"name\"=>\"Holden, Massachusetts\", \"category\"=>\"City\", \"category_list\"=>[{\"id\"=>\"224455390913969\", \"name\"=>\"City\"}], \"id\"=>\"104015212968818\"}\n{\"name\"=>\"Holden, Maine\", \"category\"=>\"City\", \"category_list\"=>[{\"id\"=>\"224455390913969\", \"name\"=>\"City\"}], \"id\"=>\"112517345426169\"}\n{\"name\"=>\"Holden, Missouri\", \"category\"=>\"City\", \"category_list\"=>[{\"id\"=>\"224455390913969\", \"name\"=>\"City\"}], \"id\"=>\"107921245894576\"}\n{\"name\"=>\"Holden, Louisiana\", \"category\"=>\"City\", \"category_list\"=>[{\"id\"=>\"224455390913969\", \"name\"=>\"City\"}], \"id\"=>\"111960155481686\"}" 

[69] pry(main)> string.split("\n").map { |a| JSON.parse(a.gsub("=>",":")) } 
=> [{"name"=>"Holden", "category"=>"Cars", "id"=>"5730024897"}, 
{"name"=>"Holden, Massachusetts", 
    "category"=>"City", 
    "category_list"=>[{"id"=>"224455390913969", "name"=>"City"}], 
    "id"=>"104015212968818"}, 
{"name"=>"Holden, Maine", 
    "category"=>"City", 
    "category_list"=>[{"id"=>"224455390913969", "name"=>"City"}], 
    "id"=>"112517345426169"}, 
{"name"=>"Holden, Missouri", 
    "category"=>"City", 
    "category_list"=>[{"id"=>"224455390913969", "name"=>"City"}], 
    "id"=>"107921245894576"}, 
{"name"=>"Holden, Louisiana", 
    "category"=>"City", 
    "category_list"=>[{"id"=>"224455390913969", "name"=>"City"}], 
    "id"=>"111960155481686"}] 

wenn es alles in derselben Zeichenfolgelinie (ohne "\ n")

string.gsub('}{','},,{').split(",,").map { |a| JSON.parse(a.gsub("=>",":")) } 
+0

Hier ist, wo es hätte sein sollen! Https://github.com/arsduo/koala/wiki/Graph-API Es scheint, die Antwort ist bereits eine Reihe von Hashes und ich kann das. Nicht JSON überhaupt. Danke Juan , – grooble