json.loads不保留双引号

时间:2015-11-30 15:34:25

标签: python json string

当我使用var driver = require('selenium-webdriver'), chai = require('chai'), expect = chai.expect; chai.use(require('chai-as-promised')); describe('Webdriver - Admin Page Tests - ', function() { beforeEach(function() { this.timeout(10000); this.driver = new driver.Builder().withCapabilities(driver.Capabilities.firefox()).build(); return this.driver.get('https://admin.example.us/en-US/sign-in'); }); afterEach(function() { return this.driver.quit(); }); describe('Login verification -', function() { it('filling in credentials and accessing the portal', function () { this.driver.sleep(250); this.driver.findElement({ css: '#app > div > div > div > div > form > div:nth-child(2) > input' }).sendKeys('test@example.com'); this.driver.findElement({ css: '#app > div > div > div > div > form > div:nth-child(3) > input' }).sendKeys('example'); this.driver.findElement({ css: '#app > div > div > div > div > form > div:nth-child(4) > input[type="checkbox"]' }).click(); var formButton = this.driver.findElement({ css: '#app > div > div > div > div > form > div:nth-child(5) > button' }); this.driver.actions() .mouseMove(formButton) .click() .perform(); this.driver.sleep(250); return expect(this.driver.getCurrentUrl()).to.eventually.equal('https://admin.example.us/en-US/dashboard'); }); }); }); 时,它会将双引号转换为单引号。 这让我感到不安,有人可以帮忙解释一下吗?

json.loads

我知道这是一种正常的行为,我可以轻松调整我的代码。但是想一想是否可以实现同样的目标呢?

1 个答案:

答案 0 :(得分:6)

首先:引号不是值的一部分。它们是语法的一部分,向解析器发出信号,表明字符串已定义。

JSON仅支持双引号,但在 Python 中,可以使用单引号或双引号定义字符串。当回显字符串值时,Python通过向您显示重新定义相同值的Python语法来反映该值。对于此表示,单引号是首选。仅当值实际包含至少一个单引号且没有双引号时才使用双引号:

>>> "Normal strings are reflected with single quotes by Python"
'Normal strings are reflected with single quotes by Python'
>>> 'Single quote: \''
"Single quote: '"
>>> 'Single quote: \', and a double quote: \"'
'Single quote: \', and a double quote: "'

您看到的是完全正常的行为。你无法改变这一点;你看到的输出是一个调试工具。如果这是您想要更改的内容,请生成您自己的格式化程序。

当您再次从Python结构生成JSON时,只会使用双引号来生成有效的JSON输出:

>>> import json
>>> json_string = '{"created_at": "2012/02/05 04:03:50 -0800"}'
>>> json.loads(json_string)
{u'created_at': u'2012/02/05 04:03:50 -0800'}
>>> json.dumps(json.loads(json_string))
'{"created_at": "2012/02/05 04:03:50 -0800"}'