【4】基础知识类---Json模块

Json模块

一、四大方法

代码说明
json.loads( )从 json 字符串 转 python 数据类型
json.load( )从 json 文件中获取 python 数据类型
json.dumps( )从 python 数据类型转 json 字符串
json.dump( )从 python 数据类型 写入到 json 文件中

二、示例

1.json.loads( )

import json
from pprint import pprint

# (1)loads 从 json 字符串 转 python 数据类型

# 在多行文本中,不允许使用单引号
# 注意点:json里面只能使用双引号
str = """
    {
    "a":5,
    "b":"aaa",
    "c":["x","y","z"],
    "d":{"name":"shelley","age":"24"}
    }   
"""
result_dict = json.loads(str)
# pprint(result_dict)
# pprint(result_dict['a'])

2.json.load( )

{
  "a": 5,
  "b": "aaa",
  "c": [
    "x",
    "y",
    "z"
  ],
  "d": {
    "name": "shelley",
    "age": "24"
  }
}
# (2)load 从 json 文件中获取 python 数据类型
with open('test.json', 'r', encoding='utf-8') as f:
    result = json.load(f)
    pprint(result)
    pprint(result['a'])
    pprint(type(result))  # <class 'dict'>

3.json.dumps( )

# (3)dumps 从 python 数据类型转 json 字符串
data = {
    'a': 5,
    'b': 'aaa',
    'c': ['x', 'y', 'z'],
    'd': {'age': '24', 'name': 'shelley'}
}

json_str = json.dumps(data)
pprint(json_str)
pprint(type(json_str))  # <class 'str'>
pprint(json_str['a'])  # 出错

4.json.dump( )

# (4)dump 从 python 数据类型 写入到 json 文件中
with open('test02.json', 'w', encoding='utf-8') as f:
    # ensure_ascii 显示中文
    # indent 写入带有缩进
    json.dump(data, f, ensure_ascii=False, indent=2)
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
面向对象 中两大关键方法,均返回Json型对象。 Json.I() '以数组下标方式获得成员,返回一个Json型的对象(即返回一个和调用型一样的对象)。 Json.K() '以键名方式获得成员,返回一个Json型的对象 意味着一句代码可以无限层次进入子对象中,比如这样的json中: {data:[ obj:{ code: 8 , data:[ msg:{ error :-8 ,errorData:{ text: 'Incorrect password' , date:1451577600}} ] } ]} 只需如下代码便可获得错误原因 错误原因=Json.K("data").I(0).K("data").K("msg").K("errorData").K("text").取文本() 当然新的版本还保留了传统的表达式方式取得对象,虽然已不推荐使用(表达式方式没有IDE提示,而且需要自己检查语法错误等缺点),具体用法如下: 错误原因=Json.X("data[0].data.msg.errorData.text").取文本() 高效 弃用上一版的自研发内核(虽然上一版容错能力惊人,但执行效率较低,短期内没有精力改进)转采用Win32API中的JScript引擎辅以内联汇编实现了似于Java的对象引用机制,即 Json.I()  /  Json.K()  /  Json.X()   所返回的对象实际上和调用对象其实是绑定的同一个Jscript对象,因此相比上个版本可大幅提高解析和查找速度。 稳定 依托于对象引用机制,无论对哪个子对象进行改变,都能稳定同步更新,而且本版集成了JSONP跨域格式的解析功能,再也不用为这样的数据格式伤脑筋了“_callback1451577600({code:-10086,msg:'密码错误!'})”。 其他注意事项 复制变量不可以使用如下方式直接复制(因对象引用机制有着引用数计次,直接复制会导致计次异常而提前释放内存继而引发程序崩溃)。 错误的方法演示: Json2=Json1 正确做法: Json2=Json1.复制() ---------------关于多线程----------------- 模块默认为多线程方式初始化的COM库,值得注意的是精易模块中有很多命令都会卸载多线程初始化(比如正则、网页访问等都会调用卸载CoUninitialize()),他们会造成程序崩溃,如果要兼容精易模块请不要调用本方法(多线程初始化COM() ),并在每个线程首次使用Json方法前加上  单线程初始化COM()。 注:这样初始化的变量不支持多线程共享,只能被最先使用的线程使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值