- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Python加载带有注释的Json文件实例由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
由于json文件不支持注释,所以如果在json文件中标记了注释,则使用python中的json.dump()无法加载该json文件.
本文旨在解决当定义“//”为json注释时,如何正确解析有注释的json文件.
程序实现 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
# encoding: utf-8
import json
import re
import sys
reload(sys)
sys.setdefaultencoding('utf8')
CAUTION_PRINT_HEAD = 'caution: '
# 创建一个xstr类,用于处理从文件中读出的字符串
class xstr:
def __init__(self, instr):
self.instr = instr
# 删除“//”标志后的注释
def rmCmt(self):
qtCnt = cmtPos = slashPos = 0
rearLine = self.instr
# rearline: 前一个“//”之后的字符串,
# 双引号里的“//”不是注释标志,所以遇到这种情况,仍需继续查找后续的“//”
while rearLine.find('//') >= 0: # 查找“//”
slashPos = rearLine.find('//')
cmtPos += slashPos
# print 'slashPos: ' + str(slashPos)
headLine = rearLine[:slashPos]
while headLine.find('"') >= 0: # 查找“//”前的双引号
qtPos = headLine.find('"')
if not self.isEscapeOpr(headLine[:qtPos]): # 如果双引号没有被转义
qtCnt += 1 # 双引号的数量加1
headLine = headLine[qtPos+1:]
# print qtCnt
if qtCnt % 2 == 0: # 如果双引号的数量为偶数,则说明“//”是注释标志
# print self.instr[:cmtPos]
return self.instr[:cmtPos]
rearLine = rearLine[slashPos+2:]
# print rearLine
cmtPos += 2
# print self.instr
return self.instr
# 判断是否为转义字符
def isEscapeOpr(self, instr):
if len(instr) <= 0:
return False
cnt = 0
while instr[-1] == '\\':
cnt += 1
instr = instr[:-1]
if cnt % 2 == 1:
return True
else:
return False
# 从json文件的路径JsonPath读取该文件,返回json对象
def loadJson(JsonPath):
try:
srcJson = open(JsonPath, 'r')
except:
print CAUTION_PRINT_HEAD + 'cannot open ' + JsonPath
quit()
dstJsonStr = ''
for line in srcJson.readlines():
if not re.match(r'\s*//', line) and not re.match(r'\s*\n', line):
xline = xstr(line)
dstJsonStr += xline.rmCmt()
# print dstJsonStr
dstJson = {}
try:
dstJson = json.loads(dstJsonStr)
return dstJson
except:
print CAUTION_PRINT_HEAD + JsonPath + ' is not a valid json file'
quit()
# 带缩进地在屏幕输出json字符串
def printRes(resStr):
resStr = resStr.replace(',', ',\n')
resStr = resStr.replace('{', '{\n')
resStr = resStr.replace(':{', ':\n{')
resStr = resStr.replace('}', '\n}')
resStr = resStr.replace('[', '\n[\n')
resStr = resStr.replace(']', '\n]')
resStr = resStr
resArray = resStr.split('\n')
preBlank = ''
for line in resArray:
if len(line) == 0:
continue
lastChar = line[len(line)-1]
lastTwoChars = line[len(line)-2:]
if lastChar in {'}', ']'} or lastTwoChars in {'},', '],'}:
preBlank = preBlank[:len(preBlank)-2]
try:
print preBlank + line.decode('utf-8')
except:
print(preBlank + '[%This line cannot be decoded%]')
if lastChar == '{' or lastChar == '[':
preBlank += ' '*2
|
以上这篇Python加载带有注释的Json文件实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我.
原文链接:https://blog.csdn.net/Foolishwolf_x/article/details/73177781 。
最后此篇关于Python加载带有注释的Json文件实例的文章就讲到这里了,如果你想了解更多关于Python加载带有注释的Json文件实例的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
所以`MKAnnotation's。有趣的东西。 我的问题: 注释的标题和副标题有什么区别?这对注释的视觉组件有何影响? MKPinAnnotationView 和 MKAnnotationView
我正在使用 JBoss 工具将 DB 模式反向工程到 POJO 中。具体来说,我在 hibernatetool ANT 任务中使用了 hbm2java 选项。在 hbm2java 选项下,您可以指定
假设我有这段文字: cat file /* comment */ not a comment /* another comment */ /* delete this * /* multiline
我明白,如果你///在类、字段、方法或属性上方 Visual Studio 将开始为您建立 XML 样式的注释。 但是,我在哪里可以为我的命名空间和/或库添加 XML 注释... 例如: .NET F
int API_VERSION = 21; @TargetApi(API_VERSION)在Android中用于指定该方法/类支持API_VERSION及以下。 我们是否可以镜像类似的东西,指定仅支持
Closed. This question needs to be more focused。它当前不接受答案。
假设我有一个界面如下。 public interface MyInterface{ /** * This method prints hello */ void sayHello();
我已将 Jboss 应用程序迁移到 WebSphere Liberty。我必须删除所有 Jboss 引用库。在这样做的同时,我在某些注释中面临问题。 Jboss 应用程序使用 @SecurityDom
在本教程中,您将了解 JavaScript 注释,为什么要使用它们以及在示例的帮助下如何使用它们。 JavaScript 注释是程序员可以添加的提示,以使代码更易于阅读和理解。JavaScri
我正在建立一个博客,为了发表评论,我有这个 CSS。 #comments { position:absolute; border: 1px solid #900; border-width: 1
我正在尝试在单元格中插入评论。我正在尝试按照代码进行评论,但它没有在创建的 excel 中显示评论。我正在创建 .xls 扩展名。 $objPHPExcel->getActiveSheet()->ge
我正在使用 TS 在 MarionetteJS 上编写项目,我想使用注释来注册路由。例如: @Controller class SomeController { @RouteMapping("so
我有一个应用程序可以在页面上生成大量注释。用户可以单击页面上的任意位置以创建快速注释(例如 Acrobat Pro)可以在一般 中使用一些 javascript 行添加和删除这些注释
是否有 JavaScript 注释? 当然 JavaScript 没有它们,但是是否有额外的库或建议的语言扩展,例如 @type {folder.otherjsmodule.foo} function
Java 中注解的目的是什么?我有一个模糊的想法,认为它们介于注释和实际代码之间。它们在运行时会影响程序吗? 它们的典型用法是什么? 它们是 Java 独有的吗?有 C++ 等价物吗? 最佳答案 注解
其实我们在 Ruby 基础语法 已经比较详细的介绍了 Ruby 语言中的注释 Ruby 解释器会忽略注释语句 注释会对 Ruby 解释器隐藏一行,或者一行的一部分,或者若干行。 Ruby 中的注
我正在 try catch VBA 注释。到目前为止,我有以下内容 '[^";]+\Z 它捕获以单引号开头但在字符串结尾之前不包含任何双引号的任何内容。即它不会匹配双引号字符串中的单引号。 dim s
有没有办法在'svn commit'上将提交注释添加到更改的文件中。有人告诉我有一种方法可以用 cvs 做到这一点,但我们使用 svn。目前,我们使用“$Revision”关键字将修订号添加到更改的文
我正在尝试通过 ManyToMany 注释自动对报告的结果进行排序 @OrderBy : /** * @ORM\ManyToMany(targetEntity="Artist", inversedB
我正在使用 JBoss 5 GA,我创建了一个测试 session bean 和本地接口(interface)。我创建了一个 servlet 客户端。我尝试使用 @EJB 将接口(interface)
我是一名优秀的程序员,十分优秀!