2017-08-18 6 views
0

Hallo Ich habe eine JSON-Daten und es gibt einige Einschränkungen in JSON-Daten, um Daten im selben Format (wie String, JSON usw.) zu übergeben. unten ist mein Code: -JSON parse Rails Fehler

 buttons:[{ 
      type: "postback", 
      title: p.name, 
      payload: "get_product" 
    }] 

hier die Nutzlast Schlüssel in der Zeichenfolge werden passieren sollte, aber ich habe auch usw. wie product_id, Name so einige andere Schlüssel zu übergeben, was ich tat, ist: -

 buttons:[{ 
      type: "postback", 
      title: p.name, 
      payload: "{'payload': 'get_product, 'product_id': #{p.id} }" 
    }] 

jetzt, wenn ich die Nutzdaten bekommen werde, dann ist es so payload = "{'payload': 'get_product', 'product_id': d644bfda-2194-447c-b0f1-5d4f52c783a4 }" und wenn ich die Zeichenfolge zu JSON analysieren und es Fehler JSON.parse(payload)Processing by Messenger::Bot::Space::StationController#receive as */* *** JSON::ParserError Exception: 784: unexpected token at '{'payload': 'get_product', 'product_id': d644bfda-2194-447c-b0f1-5d4f52c783a4 }' wirft.

Ich kenne den Grund, warum seine Fehler wirft, weil die Nutzdaten innerhalb der einfachen Anführungszeichen so, wenn ich es tat, um payload = '{"payload": "get_product", "product_id": "d644bfda-2194-447c-b0f1-5d4f52c783a4" }' und als ich habe JSON.parse(payload)

(byebug)

Nutzlast = ‚laufen { "Payload": "get_product", "product_id": "d644bfda-2194-447c-b0f1-5d4f52c783a4"}‘

(byebug) JSON.parse (Payload)

01.235.

{ "Nutzlast" => "get_product", "product_id" => "d644bfda-2194-447c-b0f1-5d4f52c783a4"}

Aber das Problem ist, wenn ich außerhalb der '{"payload": "get_product", "product_id" => #{p.id} }' Apostrophe bin mit dann Product_id Key-Wert nicht wegen String-Interpolation gedruckt, was soll ich tun.

+0

haben Sie versucht '' payload: "{'payload': 'get_product,' product_id ':' # {p.id} '}" '? – tomtomtom

+0

Wie auch immer, Sie vermissen ein einzelnes Zitat in 'Nutzlast:" {'Nutzlast': 'get_product,' product_id ': # {p.id}} "nach get_product. – Roshan

Antwort

1

Statt dessen:

"{'payload': 'get_product, 'product_id': #{p.id} }" 

tun:

{payload: 'get_product', product_id: p.id }.to_json 

Dies wird wieder so etwas wie:

"{\"payload\":\"get_product\",\"product_id\":123}" 

... So wie Sie sehen können, die ganze hard work like correctly escaping quotation marks ist für dich gesorgt.