簡體   English   中英

Ruby to_json 將西里爾文編碼為 un​​icode

[英]Ruby to_json encode cyrillic into unicode

我有一個帶有像這樣的西里爾文本的哈希對象

payload = {'date': "30",'name': 'Тест','phone': "71234567890",'sum': "0",'offer_id': "1"}

我需要將它轉換為 json 並像這樣發送到 php api 服務

{"date":"30","name":"\u0422\u0435\u0441\u0442","offer_id":"1","phone":"71234567890","sum":"0"}

但是to_json返回我

{"date":"30","name":"Тест","offer_id":"1","phone":"71234567890","sum":"0"}

在這種情況下,如何將 cyrilic 編碼為 un​​icode? 我需要將選項傳遞給to_json方法嗎?

肯定應該有一個更優雅的解決方案,但是使用String#dump使用下面的方法。

  payload.to_json.dump.
    gsub('\\"', '"').
    sub(/\A\s*"\s*|\s*"\s*\z/, '')

查看:

require 'digest/md5'
require 'json'


payload = {'date': "30",'name': 'Тест', 'offer_id': "1", 'phone': "71234567890",'sum': "0",}

expected_json = '{"date":"30","name":"\u0422\u0435\u0441\u0442","offer_id":"1","phone":"71234567890","sum":"0"}'

dumped_json =
  payload.to_json.dump.
    gsub('\\"', '"').
    sub(/\A\s*"\s*|\s*"\s*\z/, '')

puts expected_json
puts 
puts dumped_json
puts 
puts expected_json == dumped_json


puts Digest::MD5.hexdigest(expected_json)
puts Digest::MD5.hexdigest(dumped_json)

請注意,JSON 中的元素順序無法保證,因此檢查 MD5 通常是一個壞主意。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM