在JSON中表示布尔值

5

假设我有一个名为file.json的文件,其中包含以下内容:

[
  {
    "name": "Shirt1",
    "product_id": "001234"
  },
  {
    "name": "Shirt2",
    "product_id": "005678"
  }
]

使用Python3,我想向这两个字典中添加以下内容:
"type": "external"
"reviews_allowed": false

这是我的代码:
import json
import os

with open("file.json", "r", encoding="utf8") as in_file:
INP = json.load(in_file)
DATA = []
for item in INP:
    item["type"] = "external"
    item["reviews_allowed"] = "false"
    DATA.append(item)
    with open("file2.json", "w", encoding="utf-8") as out_file:
        out_file.write(json.dumps(DATA, indent=2, ensure_ascii=False))
os.rename("file2.json", "file.json")

然而,我得到了以下结果:
[
  {
    "name": "Shirt1",
    "product_id": "001234",
    "type": "external",
    "reviews_allowed": "false"
  },
  {
    "name": "Shirt2",
    "product_id": "005678",
    "type": "external",
    "reviews_allowed": "false"
  }
]

有没有办法去掉false周围的双引号? 非常感谢您的时间!

2
使用False代替"false" - cs95
那很快啊!非常感谢,亲爱的朋友! - haz14
2个回答

13

false在JSON中被recognised为自己的类型:

一个值可以是双引号中的字符串,或者是数字,或者是truefalsenull,或者是一个对象或数组。

在Python中,JSON中的false直接映射到Falsebool值:

>>> json.dumps({'val' : False})
'{"val": false}'

哇,看来我们恰好在同一秒提交了。当然,你的答案更完整... +1 - Robᵩ
@Robᵩ 我们俩想法一致,不管表达方式如何,所以我也点了个赞 :-) - cs95

7
JSON概念中的false直接对应Python概念中的False。使用以下代码行:
item["reviews_allowed"] = False

我将接受COLDSPEED的答案,因为他在原始问题中首先发表了评论。希望这对大家都没问题 :-) - haz14
2
这里有一个简单的规则:给每个有帮助的答案点赞。接受解决问题或最佳解决方案的答案。不要担心谁先来。无论如何,感谢您接受答案!当人们这样做时,它确实有助于网站更好地运作。 - Robᵩ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接