首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何读取带有注释的JSON文件?

如何读取带有注释的JSON文件?
EN

Stack Overflow用户
提问于 2021-09-02 00:25:44
回答 5查看 1.8K关注 0票数 2

该评论正在导致错误。我有一个contents.json文件,它看起来像:

代码语言:javascript
复制
{
"Fridge": [
    ["apples"],
    ["chips","cake","10"]    // This comment here is causing error
],
"car": [
    ["engine","tires","fuel"],
    ]
}

我的python脚本是这样的

代码语言:javascript
复制
import json
jsonfile = open('contents.json','r')
jsondata = jsonfile.read()
    
objec = json.loads(jsondata)

list_o = objec['Fridge']

for i in (list_o):
    print(i)

在我的list_o中,我试图从JSON文件加载Fridge,当JSON文件有这个注释时,它会给我一个错误,当JSON文件没有注释时,脚本就会正常运行。

我知道注释不是正确的JSON格式,但是有什么方法可以忽略JSON文件的注释吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2021-09-02 00:55:11

按行读取文件并删除注释部分。

代码语言:javascript
复制
import json

jsondata = ""
with open('contents.json', 'r') as jsonfile:
    for line in jsonfile:
        jsondata += line.split("//")[0]

objec = json.loads(jsondata)

list_o = objec['Fridge']

for i in (list_o):
    print(i)
代码语言:javascript
复制
['apples']
['chips', 'cake', '10']

更新

您也可以轻松地使用诸如解说这样的库。只需替换:

代码语言:javascript
复制
objec = json.loads(jsondata)

代码语言:javascript
复制
import commentjson  # python3 -m pip install commentjson
objec = commentjson.loads(jsondata)
票数 1
EN

Stack Overflow用户

发布于 2021-09-02 02:47:30

@NielGodfreyPonciano的答案在大多数情况下是可行的,但如果//是字符串的一部分,则会失败。

对于更健壮的解决方案,您可以将其解析为JSON5 (支持注释的一组JSON超集),并使用pyjson5模块:

代码语言:javascript
复制
import json5

data = '''{
"Fridge": [
    ["apples"],
    ["chips","cake","10"]    // This comment here is causing error
],
"car": [
    ["engine","tires","fuel"],
    ]
}'''

print(json5.loads(data))

这一产出如下:

代码语言:javascript
复制
{'Fridge': [['apples'], ['chips', 'cake', '10']], 'car': [['engine', 'tires', 'fuel']]}

演示:https://replit.com/@blhsing/MicroHatefulEnterprise

票数 3
EN

Stack Overflow用户

发布于 2022-03-18 20:41:32

按照@blhsing's和@NielGodfreyPonciano的答案,您也可以通过使用regular expressions内置模块来实现这一点。

代码语言:javascript
复制
import re
import json


with open("contents.json", "r") as JSONfile:
    objec = json.loads("".join(re.split(r"(?://|#).*(?=\n)", JSONfile.read())).strip())
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69021815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档