Pythonh中用json.load() json.loads()加载json数据的方法

Pythonh中用json.load() json.loads()加载json数据的方法最近在 python 里面用 json 读取 json 文件 可是老是不成功 特此记录一下 预备知识 defload fp cls None object hook None parse float None parse int None parse constant None object pairs hook None kw Deserialize

最近在python里面用json读取json文件,可是老是不成功,特此记录一下。

预备知识:

def load(fp, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, kw): """Deserialize ``fp`` (a ``.read()``-supporting file-like object containing a JSON document) to a Python object.""" def loads(s, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, kw): """Deserialize ``s`` (a ``str`` instance containing a JSON document) to a Python object.""" 
with open("文件名") as f: print(type(f)) # 
   
     也就是文本IO类型 
    result=json.load(f) with open("文件名") as f: line=f.readline(): print(type(line)) # 
    result=json.loads(line)

使用方法

从以上可以看出json.load()是用来读取文件的,即,将文件打开然后就可以直接读取。示例如下:

with open("文件名") as f: result=json.load(f)

json.loads()是用来读取字符串的,即,可以把文件打开,用readline()读取一行,然后json.loads()一行。示例如下:

#json文件为: { 
  "outputs": ["pool1/7x7/ets", "pool1/7x7/rf", "pool1/10x10/ets", "pool1/10x10/rf", "pool1/13x13/ets", "pool1/13x13/rf"]}

读取代码如下:

with open("文件名") as f: line=f.readline(): result=json.loads(line)

当json文件如下时,读取内容是错误的:

{ "dataset":{ "train": { 
  "type": "mnist", "data_set": "train", "layout_x": "tensor"}, "test": { 
  "type": "mnist", "data_set": "test", "layout_x": "tensor"} }, "train":{ "keep_model_in_mem":0, "random_state":0, "data_cache":{ "cache_in_disk":{ "default":1 }, "keep_in_mem":{ "default":0 }, "cache_dir":"/mnt/raid/fengji/gcforest/mnist/fg-tree500-depth100-3folds/datas" } }, "net":{ "outputs": ["pool1/7x7/ets", "pool1/7x7/rf", "pool1/10x10/ets", "pool1/10x10/rf", "pool1/13x13/ets", "pool1/13x13/rf"], "layers":[ { "type":"FGWinLayer", "name":"win1/7x7", "bottoms": ["X","y"], "tops":["win1/7x7/ets", "win1/7x7/rf"], "n_classes": 124, "estimators": [ { 
  "n_folds":3,"type":"ExtraTreesClassifier","n_estimators":500,"max_depth":100,"n_jobs":-1,"min_samples_leaf":10}, { 
  "n_folds":3,"type":"RandomForestClassifier","n_estimators":500,"max_depth":100,"n_jobs":-1,"min_samples_leaf":10} ], "stride_x": 2, "stride_y": 2, "win_x":7, "win_y":7 }, { "type":"FGWinLayer", "name":"win1/10x10", "bottoms": ["X","y"], "tops":["win1/10x10/ets", "win1/10x10/rf"], "n_classes": 10, "estimators": [ { 
  "n_folds":3,"type":"ExtraTreesClassifier","n_estimators":500,"max_depth":100,"n_jobs":-1,"min_samples_leaf":10}, { 
  "n_folds":3,"type":"RandomForestClassifier","n_estimators":500,"max_depth":100,"n_jobs":-1,"min_samples_leaf":10} ], "stride_x": 2, "stride_y": 2, "win_x":10, "win_y":10 }, { "type":"FGWinLayer", "name":"win1/13x13", "bottoms": ["X","y"], "tops":["win1/13x13/ets", "win1/13x13/rf"], "n_classes": 10, "estimators": [ { 
  "n_folds":3,"type":"ExtraTreesClassifier","n_estimators":500,"max_depth":100,"n_jobs":-1,"min_samples_leaf":10}, { 
  "n_folds":3,"type":"RandomForestClassifier","n_estimators":500,"max_depth":100,"n_jobs":-1,"min_samples_leaf":10} ], "stride_x": 2, "stride_y": 2, "win_x":13, "win_y":13 }, { "type":"FGPoolLayer", "name":"pool1", "bottoms": ["win1/7x7/ets", "win1/7x7/rf", "win1/10x10/ets", "win1/10x10/rf", "win1/13x13/ets", "win1/13x13/rf"], "tops": ["pool1/7x7/ets", "pool1/7x7/rf", "pool1/10x10/ets", "pool1/10x10/rf", "pool1/13x13/ets", "pool1/13x13/rf"], "pool_method": "avg", "win_x":2, "win_y":2 } ] } }

因为在代码中,json.loads()并没有读取完整的json文件,只是读取了行,所以这时json.loads(line)读取的是不合符json语法的字符串,会报错:

with open("文件名") as f: line=f.readline(): # 这里line只是读取了json文件的一行,并没有全部读取,所以line里面所存的字符串是不符合json语法的,所以读取出错。 result=json.loads(line) Traceback (most recent call last): File "D:/PycharmProjects/mnistCheck/test.py", line 12, in 
  
    result = json.loads(row) File 
   "C:\ProgramData\Anaconda3\envs\tensorflow\lib\json\__init__.py", line 
   319, 
   in loads 
   return _default_decoder.decode(s) File 
   "C:\ProgramData\Anaconda3\envs\tensorflow\lib\json\decoder.py", line 
   339, 
   in decode obj, end = self.raw_decode(s, idx=_w(s, 
   0).end()) File 
   "C:\ProgramData\Anaconda3\envs\tensorflow\lib\json\decoder.py", line 
   355, 
   in raw_decode obj, end = self.scan_once(s, idx) json.decoder.JSONDecodeError: Expecting property name enclosed 
   in double quotes: line 
   2 column 
   1 (char 
   2) 
  

那么问题来了。。。。在实际应用中,我们会在json文件中做注释,比如以“//”开头的注释,除了注释部分外,其他内容都是符合json语法的,那么我们要怎么处理呢?

 def load_json(path): import json lines = [] # 第一步:定义一个列表, 打开文件 with open(path) as f: for row in f.readlines(): # 第二步:读取文件内容  if row.strip().startswith("//"): # 第三步:对每一行进行过滤  continue lines.append(row) # 第四步:将过滤后的行添加到列表中. return json.loads("\n".join(lines)) #将列表中的每个字符串用某一个符号拼接为一整个字符串,用json.loads()函数加载,这样就大功告成啦!!

今天的学习就到这里,明天见!!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/204815.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午7:28
下一篇 2026年3月19日 下午7:28


相关推荐

  • SpringSecurity认证授权学习笔记

    SpringSecurity认证授权学习笔记

    2021年7月12日
    127
  • apache Tika介绍及使用

    apache Tika介绍及使用1 Tika 应用层架构应用程序员可以很容易地在他们的应用程序集成 Tika Tika 提供了一个命令行界面和图形用户界面 使它比较人性化 在本章中 我们将讨论构成 Tika 架构的四个重要模块 下图显示了 Tika 的四个模块的体系结构 语言检测机制 MIME 检测机制 Parser 接口 TikaFacade 类 1 1 语言检测机制每当一个文本文件被传递到 Tika 它将检

    2026年3月20日
    3
  • 零成本搭建AI开发环境:Windows+WSL实现OpenClaw本地化部署全攻略

    零成本搭建AI开发环境:Windows+WSL实现OpenClaw本地化部署全攻略

    2026年3月13日
    2
  • Java标识符的命名规则[通俗易懂]

    Java标识符的命名规则[通俗易懂]Java语言中,为各种变量、方法和类等起的名字称为标识符Java标识符的命名规则:应以字母、下划线、美元符开头后跟字母、下划线、美元符或数字Java标识符大小写敏感,长度无限制1.java中能用作标识符的有:26个英文字母(大、小写),数字,下划线,美元符号$。但是不能以数字开头。2.类名首个字母必须大写,多个单词组成的,每个单词首字母都要大写。3.方法名一般首个字母小写(构造…

    2022年7月8日
    36
  • token实现验证登录(token如何使用)

    1.场景还原可能还有很多小伙伴对token概念朦朦胧胧,今天笔者以项目中的用户登录的token验证需求跟大家讲讲其中的来龙去脉,希望能够理清大伙的思路。2.需求分析这个需求可能早已是老生常谈,但我觉得它永远也不会过时①谷歌浏览器:login.html—->index.html;②然后复制index.html的地址在IE浏览器地址栏上,这时普遍网站都会使访问界面直接

    2022年4月14日
    292
  • 国际企业邮箱优势有哪些?国际邮箱申请方法教学「建议收藏」

    国际企业邮箱优势有哪些?国际邮箱申请方法教学「建议收藏」相信很多小伙伴都用过邮箱,但是大家只会用邮箱收发邮件,处理工作的事务,事实上并不了解邮箱。企业邮箱的优势都有哪些,如何更好地使用邮箱呢?那么下面,小编就以TOM企业邮箱为例,为大家详细讲解邮箱的优势吧!国际企业邮箱优势市场上主流邮箱产品有普通、VIP和企业邮箱三种,针对于国际业务邮件,其中以企业邮箱为首的服务最为全面,其次是VIP邮箱。优势一:海外通道企业邮箱最大优势在于,可以和国外邮箱进行信件往来,原因来自于企业邮箱设有独立的海外通道,将国内和国外的邮箱通道很好的进行连通,有效保障收件收发稳定。

    2025年11月24日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号