pd.read_json中单双引号的差异及字符串不等问题咨询
问题:单双引号互换的JSON字符串为何在pd.read_json中表现不同?
我定义了两个字符串:
d1 = "[{'col 1':'a','col 2':'b'}]" d2 = '[{"col 1":"a","col 2":"b"}]'
二者仅单双引号使用位置互换,数据内容看似一致,但使用pd.read_json处理时结果完全不同:处理d1会抛出ValueError,处理d2则能正常生成DataFrame。测试发现二者类型均为str,但d1与d2不相等,请问这是为什么?
解答
- JSON语法的硬性要求:标准JSON规范强制要求字符串(包括对象的键)必须用双引号包裹,单引号不属于合法的JSON语法。
pd.read_json依赖标准JSON解析逻辑,所以会拒绝解析用单引号的d1,而完全符合规范的d2能被正常处理。 - 字符串本身的字符差异:d1和d2的实际字符序列并不相同——d1内部是单引号
',d2内部是双引号",这两个是不同的字符,所以直接比较字符串时结果自然不相等。 - Python字符串写法的迷惑性:你用双引号包裹整个字符串、内部放单引号,和用单引号包裹整个字符串、内部放双引号,这只是Python定义字符串的两种合法方式,但最终生成的字符串内容(存储的字符)是不一样的,这才是导致后续解析差异的核心原因。
内容的提问来源于stack exchange,提问作者Laurent B.
相关产品推荐
相关产品推荐

