2017-08-18 309 views
0

嗨我有一個JSON數據,並有一些JSON數據傳遞相同格式的數據(如字符串,JSON等)的限制。下面是我的代碼: -JSON解析Rails錯誤

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

這裏的有效載荷關鍵應該把這個字符串中,但我也必須通過一些其他按鍵一樣的product_id,名稱等,所以我所做的是: -

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

現在當我將獲得有效載荷數據,那麼它就是這樣的payload = "{'payload': 'get_product', 'product_id': d644bfda-2194-447c-b0f1-5d4f52c783a4 }",當我解析字符串到JSON和它會拋出錯誤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 }'

我知道爲什麼它會引發錯誤的原因是因爲單引號內的有效載荷數據,所以當我這樣做是爲了payload = '{"payload": "get_product", "product_id": "d644bfda-2194-447c-b0f1-5d4f52c783a4" }',當我沒跑JSON.parse(payload)

(byebug)

有效載荷=「{ 「有效載荷」: 「get_product」, 「PRODUCT_ID」: 「d644bfda-2194-447c-b0f1-5d4f52c783a4」}」

(byebug) JSON.parse(有效載荷)

{ 「有效載荷」=> 「get_product」, 「PRODUCT_ID」=> 「d644bfda-2194-447c-b0f1-5d4f52c783a4」}

但是,當我使用'{"payload": "get_product", "product_id" => #{p.id} }'外單引號的問題那麼由於字符串插值而沒有打印product_id鍵值,所以我該怎麼做。

+0

您是否嘗試過「payload」:{'payload':'get_product,'product_id':'#{p.id}'}「'? – tomtomtom

+0

無論如何,在get_product之後,您在'payload'中丟失了一個單引號:「{'payload':'get_product,'product_id':#{p.id}}」'。 – Roshan

回答

1

取而代之的是:

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

這樣做:

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

這將返回類似:

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

...所以你可以看到,所有的hard work like correctly escaping quotation marks照顧你。