2016-08-07 23 views
-2

So habe ich einige json, die so aussieht, die ich bekam, nachdem sie aus einem anderen json Einnahme von response.body.to_json tun:Ruby-Parse String JSon

{\n \"access_token\": \"<some_access_token>\",\n \"token_type\": \"Bearer\",\n \"expires_in\": 3600,\n \"id_token\": \<some_token>\"\n}\n" 

Ich möchte die access_token ziehen, so dass ich do

to_return = {token: responseJson[:access_token]} 

aber das gibt mir ein

TypeError: no implicit conversion of Symbol into Integer

Warum? Wie bekomme ich mein Zugriffs-Token? Warum gibt es überall zufällige Backslashes?

+0

versuchen diesem Beispiel 's = "{\ n \" access_token \ ": \" \ ", \ n \" token_type \ ": \" Bearer \ ", \ n \" expires_in \ ": 3600, \ n \" id_token \ ": \" \ "\ n} \ n" ' , 'res = JSON.parse (s)', 'res [" access_token "]' –

Antwort

0

Mit doppelten Anführungszeichen beim Aufruf von access_token verwenden. Wie unten:

to_return = {token: responseJson["access_token"]} 

Oder Backslashes sind Escape-Trennzeichen und stellen Sie sicher, dass Sie zuerst JSON parsen.

+0

habe ich den JSON nicht mit meinem 'to_json' Aufruf analysiert? – praks5432

+0

@ praks5432 parsen Sie immer noch den Json mit 'to_json' – Reboot

+0

@ praks5432, aber nach dem Parsen haben Sie string [" access_token "] nicht Symbol [: access_token], um darauf zuzugreifen. – Reboot

2

to_json analysiert JSON nicht - es macht das komplette Gegenteil: es verwandelt ein Ruby-Objekt in einen String, der die JSON-Repräsentation dieses Objekts enthält.

Es ist nicht klar aus Ihrer Frage, was response.body ist. Es könnte eine Zeichenfolge sein, oder abhängig von Ihrer http-Bibliothek wurde es möglicherweise bereits für Sie analysiert.

Wenn letzteres dann

response.body["access_token"] 

Wird Ihr Token sein, wenn der ehemalige versuchen dann

JSON.parse(response.body)["access_token"]