为什么可以';我在馈送到json.dumps()的Python对象中使用true/false/null吗? 我正在尝试解码(我认为这是正确的词)JSON,以便为python将true、false、null转换为true、false、None

为什么可以';我在馈送到json.dumps()的Python对象中使用true/false/null吗? 我正在尝试解码(我认为这是正确的词)JSON,以便为python将true、false、null转换为true、false、None,python,json,Python,Json,我知道我需要json库 我跟着走了,但没走到哪儿 我仍然收到相同的错误: name错误:未定义名称“true” 我做错了什么/需要做什么 另外,我来自javascript背景,因此学习约定和术语是一件痛苦的事情。在“d2”之后的另一个线程的链接中,“u”在每个json键前加了什么?在Python中,您需要True、False和None raw_json = { 'a':'aa', 'b':'bb', 'c':'cc', 'd': True, 'e':

我知道我需要
json

  • 我跟着走了,但没走到哪儿

  • 我仍然收到相同的错误:
    name错误:未定义名称“true”
  • 我做错了什么/需要做什么


    另外,我来自javascript背景,因此学习约定和术语是一件痛苦的事情。在“d2”之后的另一个线程的链接中,“u”在每个json键前加了什么?

    在Python中,您需要
    True
    False
    None

    raw_json = {
        'a':'aa',
        'b':'bb',
        'c':'cc',
        'd': True,
        'e': False,
        'f': None
    }
    

    在JSON变量
    raw_JSON
    中,需要大写
    True
    False
    。在Python中,布尔值被大写为true和false。当您将其序列化为JSON时,它们的大小写将降低。另外,
    None
    是Python中的
    null
    的等价物

    当您执行JSON转储时,您将接收一个Python字典(必须是有效的Python)并输出一个遵循JSON标准的字符串。转换将大写的True、False和None直观地更改为JSON等价物True、False和null


    要回答为什么字符串上有
    u
    s,这是指字符串是Unicode字符串

    如果将原始JSON嵌入到字符串中,则可以将其嵌入到代码中(如果您使用良好的实践从磁盘或网络读取数据,无论如何,这就是您所拥有的):


    因为
    true
    false
    null
    都在字符串中,解析器不会尝试将它们作为有效的Python来读取,所以
    json.loads()
    能够看到它们最初编写时的样子。

    迟来获得答案,但我的观点是:您可以将原始json编写为:

    raw_json = {
        'a':'aa',
        'b':'bb',
        'c':'cc',
        'd':bool(1),
        'e':bool(0),
        'f':None
               }
    

    “None”相当于null。布尔函数有助于为您创建“true”和“false”的标识符。

    true
    不是Python的有效标识符
    true
    对Javascript有效,对于Python它是
    true
    raw_json
    实际上不是json;它只是一个Python
    dict
    对象
    json_dump
    将是json(符合ECMA-404的文本字符串,表示数据结构)
    json\u load
    是由
    json\u dump
    表示的Python对象。由于馈送到
    dumps
    的对象需要是有效的Python对象,因此需要用Python语言描述它,因此使用
    True
    vs
    True
    。如果您希望能够用JSON而不是Python编写内容,那么您需要将其放入字符串中,并使用
    loads()
    解析该字符串。@HanniAbu,是的,但它将
    true
    作为传递给
    loads()
    的字符串的一部分;它不能用作Python文本…也就是说:
    raw_json=open('in.json','r')。read()
    不会产生与您在这里的示例代码相同的行为,即使
    in.json
    的内容与您在问题中给出的内容完全匹配。我知道,但据我所知,json库可以为我做到这一点,不是吗?它可以,但你走错了方向
    true
    作为JSON对象中的一个不带引号的关键字,可以通过
    JSON进行转换。将
    加载到Python文本
    true
    。因此它只能执行关键字而不能执行值?在下面的示例中,可以转换值。如果正在转换,则为“是”。但转换后的表单不再是Python,而是字符串。
    # similar to what you'd get from raw_json=open('in.json', 'r').read()
    raw_json = '''{
    'a':'aa',
    'b':'bb',
    'c':'cc',
    'd':true,
    'e':false,
    'f':null
    }'''
    
    python_struct = json.loads(raw_json)
    json_again = json.dumps(raw_json)
    
    raw_json = {
        'a':'aa',
        'b':'bb',
        'c':'cc',
        'd':bool(1),
        'e':bool(0),
        'f':None
               }