2017-08-18 18 views
0

こんにちは私はJSONデータを持っており、JSONデータには文字列、JSONなどの同じフォーマットでデータを渡すためのいくつかの制限があります。以下の私のコードは次のとおりです。 -JSON解析レールエラー

ここ
 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 }.to_json 

のようなこの返されます何か:

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

...あなたが見ることができるように、すべてのhard work like correctly escaping quotation marks

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

これを行いますあなたの世話をしています。