json模块

json模块常用的四种方式:

json四种方法
json.loads      #把json字符串 转化成 python对象
json.dumps   #把python对象 转换成 json字符串
多s的  处理字符串的;没有多s的   处理文件的
json.load        #把文件的json字符串 转化成   python 对象
json.dump      #把python对象 转化成 json字符串 并存储到文件

json和python数据类型对应关系:

  1. python转换为json
PythonJSON
dictobject
list,tuplearray
strstring
int,float,int- & float-derived Enumsnumber
Truetrue
Falsefalse
Nonenull
  1. json转换为python
JSONPython
objectdict
arraylist
stringstr
number(int)int
number(real)float
trueTrue
falseFalse
nullNone

例子:

#把py 的dict格式  转化成 json字符串; 使用dumps

import json

a = dict(name = "hewj", age=25, message="so good")
print(a)
print(type(a))
b = json.dumps(a)
print(type(b))

print("下面是json格式转换成dict格式")
c = json.loads(b)
print(type(c))
print(c)
输出结果:
{'name': 'hewj', 'age': 25, 'message': 'so good'}
<class 'dict'>
<class 'str'>
下面是json格式 转换成 dict格式
<class 'dict'>
{'name': 'hewj', 'age': 25, 'message': 'so good'}

sort_keys参数: 表示序列化时是否对dict的key进行排序(dict默认是无序的)

import json
x = {'a':'str', 'c': True, 'e': 10, 'b': 11.1, 'd': None, 'f': [1, 2, 3], 'g':(4, 5, 6)}
print(x)
print(type(x))
y = json.dumps(x, sort_keys=True)
print(y)

输出结果:

{'a': 'str', 'c': True, 'e': 10, 'b': 11.1, 'd': None, 'f': [1, 2, 3], 'g': (4, 5, 6)}
<class 'dict'>
{"a": "str", "b": 11.1, "c": true, "d": null, "e": 10, "f": [1, 2, 3], "g": [4, 5, 6]}


例子2:把json字符串 写入文件,并在终端读取

import codecs
import json
##把json 字符串 写入 文件 1.txt 中
jsondata = '{"a":1, "b":2, "c":3, "d":4}'
with codecs.open('1.txt', 'w') as f:
    json.dump(jsondata, f)  #把python对象 转化成 json字符串 并存储到1.txt

#从文件1.txt 读取 json
with codecs.open('1.txt', 'r') as f:
    m = json.load(f)      #读取1.txt 中的json字符串并转换成python对象
    print(m)
    print(type(m))

输出结果:

{"a":1, "b":2, "c":3, "d":4}

<class 'str'>

写入的文件



面向对象 类中两大关键方法,均返回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、付费专栏及课程。

余额充值