Python 请求帮助 Ruby [hash] 与 Python [dict]

dawei · 2020年06月15日 · 最后由 dawei 回复于 2020年07月03日 · 3124 次阅读
2.5.1 :007 > hash = {a: '1', b: '2', c: '3'}
 => {:a=>"1", :b=>"2", :c=>"3"}
2.5.1 :008 > hash.to_json
 => "{\"a\":\"1\",\"b\":\"2\",\"c\":\"3\"}"
2.5.1 :009 > hash.to_json.length
 => 25

2.5.1 :010 > JSON.dump(hash)
 => "{\"a\":\"1\",\"b\":\"2\",\"c\":\"3\"}"
2.5.1 :011 > JSON.dump(hash).length
 => 25

>>> import json
>>> dict = {'a': '1', 'b': '2', 'c': '3'}
>>> json.dumps(dict)
'{"a": "1", "b": "2", "c": "3"}'
>>> len(json.dumps(dict))
30

怎样用 ruby 得到和 python 同样得结果呢?

已经尝试过:

2.5.1 :015 > JSON.generate(hash, space: " ")
 => "{\"a\": \"1\",\"b\": \"2\",\"c\": \"3\"}"
2.5.1 :016 > JSON.generate(hash, space: " ").length
 => 28
# space: a string that is put after, a : or , delimiter (default: '')

ruby json string :, 后无空格

py json string :, 后存在空格

1 楼 已删除

JSON.generate(hash, space: " ", indent: " ").sub(/\s/, '')

irb(main):016:0> h = {'a': '1', 'b': '2', 'c': '3'}
{
    :a => "1",
    :b => "2",
    :c => "3"
}
irb(main):017:0> puts h.to_json(space: ' ').gsub(/","/, '", "')
{"a": "1", "b": "2", "c": "3"}
nil
irb(main):018:0> h.to_json(space: ' ').gsub(/","/, '", "').length
30

ruby 目前只能给冒号后加空格,即 space: ' ' 选项,对逗号后空格无可用选项。可以考虑用 gsub(/","/, '", "'),替换部分附带上了双引号是考虑降低替换掉键值对内容的逗号风险。有个类似的贴子 https://ruby-china.org/topics/39856

zhengpd 回复

哈哈,多谢解答,就是感觉这种操作不太 ruby

json 格式本身没有规定逗号后面能不能多加个空格。加 2 个空格也是符合语法的。

7 楼 已删除

是获取 hash 转 json 字符串后的长度吗?这样好像可以的吧?

2.3.7 :018 > hash
 => {:a=>"1", :b=>"2", :c=>"3"} 
2.3.7 :019 > len = JSON.parse(hash.to_json).to_s
 => "{\"a\"=>\"1\", \"b\"=>\"2\", \"c\"=>\"3\"}" 
2.3.7 :020 > len.length
 => 30 

#一行的话
2.3.7 :021 > JSON.parse(hash.to_json).to_s.length
 => 30 
Sylor-huang 回复

不是这个意思哦

dawei 关闭了讨论。 07月04日 12:04
需要 登录 后方可回复, 如果你还没有账号请 注册新账号