有没有办法让每一个 json 数据转为与之对应的字符串,而且对于 Python , Java 和 js 等语言都通用且转化的字符串也相等?

2018-05-08 10:25:27 +08:00
 myyou

例如:

{"a": "数据 1", "b": ["测试 1", "测试 2"]}

这样的数据转为一个字符串,对于多数语言通用,且各个语言转化的字符串相等,最好是可逆的。

3652 次点击
所在节点    Python
31 条回复
vimiix
2018-05-08 15:37:38 +08:00
为啥要比较 Json 字符串是否相等,json 字符串的大小太不可控了。
具体不知道你是什么应用,但可以考虑使用 MD5 验证是否一致
Trim21
2018-05-08 15:41:54 +08:00
@ipwx 3.6 之前的不是有序的,3.6 之后的才是有序的 而且以后可能变回无序
lolizeppelin
2018-05-08 15:53:30 +08:00
典型前端思路 怎么方便怎么来
不就是想直接拿 string 相等来判断么
srlp
2018-05-08 21:46:38 +08:00
序列化成字符串的时候把 key 排序、多余空格去掉、注释删掉即可,基本可以保证是相等的。

不过这种结构化的东西,本来就应该结构化地比较,用字符串来比较看起来不是正道。
srlp
2018-05-08 21:52:50 +08:00
另外,按照 key 排序这一点,不同编程语言的排序定义可能不一样,非 ascii 的字符怎么排这个也要定好,等等,还是有很多要注意的。

在可控的环境下可以考虑,要对任意情况下都能解决,对楼主来说可能有点困难了。
yzmm
2018-05-09 10:00:54 +08:00
json 只是数据格式,比较还得自己写转换,不能混为一谈吧。
myyou
2018-05-09 10:05:27 +08:00
@vimiix MD5 怎么校验?怎样把不同语言产生的 json 字符串生成相同 MD5 ?有没有办法没?
myyou
2018-05-09 10:05:59 +08:00
@yzmm 有没有好的转化方法没?
mayorbryant
2018-05-09 11:15:04 +08:00
感觉你说的跟验签差不多,不管是 js 还是 Python 来的 json 数据,你要验证是否为同一个 string?那就在 js 和 Python 保持格式一致啊,不管是用 json.dumps 还是自己写一个方法,比如说按照 key 的升序以'key=value&'拼接
towl
2018-05-09 20:25:06 +08:00
没看明白是啥意思,看了评论,大概是找有序字典? 如果是这样的话,建议使用 python 内置模块 collections.OrderedDict
myyou
2018-05-10 09:59:40 +08:00
@towl 不是有序字典,是希望不论哪种编程语言,通过一定算法把 json 转为一个字符串,通过比较字符串就能确认两个 json 是否相等

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/452995

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX