json 协议有规定连续两次序列化一个对象应该怎么样吗?-灵析社区

北北che

json 协议有规定连续两次序列化一个对象应该怎么样吗? 子问题: * python 如果反序列化一个「连续两次序列化后的字符串」 * java 如果反序列化一个「连续两次序列化后的字符串」 * * * 有一个 python 的 dict content = { 'name': '你好' } 我调用两次 json.dumps() import json content = { 'name': '你好' } print(json.dumps(json.dumps(content))) 输出如下 "{\"name\": \"\\u4f60\\u597d\"}" 然后我调用两次 json.loads,这个「被连续两次序列化后的字符串」就会变回 dict import json content = { 'name': '你好' } print(json.dumps(json.dumps(content))) a = json.dumps(json.dumps(content)) print(json.loads(json.loads(a))) 输出如下: "{\"name\": \"\\u4f60\\u597d\"}" {'name': '你好'} 一切都非常的优雅 但是当我 python 把 `"{\"name\": \"\\u4f60\\u597d\"}"` 传递给 java 同事的时候,他们告诉我,他们无法「简单」实现「把上面的字符串连续两次反序列化变成一个 hashmap」,他们说如果要反序列化成 hashmap 怎么怎么麻烦 我不理解,这么成熟的编程语言 java 为什么不能简单优雅的实现这一点? * * * 我把这个需求「使用 java 反序列化 `"{\"name\": \"\\u4f60\\u597d\"}"` 为 hashmap」问 chatGPT,它给的答案也是莫名其妙 为什么?是 java 的问题还是说 json 的协议就对于「连续两次序列化」没有做出标准规定导致不同编程语言自己有自己的实现? * * * 有谁知道,像 golang 和 rust、js 这些语言又是怎么处理这个问题呢?

阅读量:201

点赞量:0

问AI
一次序列化的结果是 string ,两次序列化不过就是把 string 根据 json 序列化 string 的规则又序列化了一遍。 对于 Java 这一个强类型语言来说,表示 Json 这个各种类型混合的对象本身就是一件很麻烦的事情。所以不论你是一次序列化还是两次,都有很多麻烦事要搞。