分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 软件开发

json 模块

发布时间:2023-09-06 01:45责任编辑:赖小花关键词:jsjson

json介绍:

  json(javascript object notation)全称是javascript对象表示法,它是一种数据交换的文本格式,而不是一种编程语言,用于读取结构化数据。2001年由Douglas Crockford提出,目的是取代繁琐笨重的XML格式。

  下面介绍的语法规则是在js中介绍的

json语法规则

  【1】简单值

    字符串必须使用双引号表示,不能使用单引号。数值必须以十进制表示,且不能使用NaN和Infinity。JSON不支持javascript中的特殊值undefined

#合格的简单值1"hello python"truenull
#不合格的简单值+0x1‘hello world‘undefinedNaNInfinity

  【2】对象

    对象作为一种复杂数据类型,表示的是一组有序的键值对儿。而每个键值对儿中的值可以是简单值,也可以是复杂数据类型的值

  与javascript的对象字面量相比,JSON有三个不同的地方

  1、JSON没有变量的概念

  2、JSON中,对象的键名必须放在双引号里面

  3、因为JSON不是javascript语句,所以没有末尾的分号

  4、同一个对象中不应该出现两个同名属性

#合格的对象{ ???"name":"今晚打老虎", ???"age":18, ???"school":{ ???????"name":"pengzhong", ???????"location":"shanwei" ???}}
#不合格的对象{ name: "小明", ‘age‘: 32 }#属性名必须使用双引号{};#不需要末尾的分号

  【3】数组

    数组也是一种复杂数据类型,表示一组有序的值的列表,可以通过数值索引来访问其中的值。数组的值也可以是任意类型——简单值、对象或数组。

  JSON数组也没有变量和分号,把数组和对象结合起来,可以构成更复杂的数据集合。数组或对象最后一个成员的后面,不能加逗号

eval()函数

  首先先介绍下eval()函数

  语法:eval(source[, globals[, locals]])

  作用:将字符串当成有效的表达式来求值并返回计算结果。参数:source:一个Python表达式或函数compile()返回的代码对象;globals:可选。必须是dictionary;locals:可选。任意map对象。

#######字符串转换成列表##########str = "[1,2,3]"print(type(str))#<class ‘str‘>list = eval(str)print(list)#[1, 2, 3]print(type(list))#<class ‘list‘>########字符串转换成字典#########str = "{1: ‘a‘, 2:‘b‘}"print(type(str))#<class ‘str‘>dict = eval(str)print(dict)#{1: ‘a‘, 2: ‘b‘}print(type(dict))#3<class ‘dict‘>
a = b = 1add = eval("a + b")print(add)#2def test(): ???a = b = 2 ???num2 = eval("a + b") ???print(num2) ???#4 ???num3 = eval("a + b",globals()) ???num4 = eval("a + b",globals(),locals()) ???print(num3) ???# 2 ???print(num4) ???#4test()print(locals()["a"])#1print(locals()["b"])#1print(globals()["a"])#1print(globals()["b"])#1

eval()使用原因:

     1)在编译语言里要动态地产生代码,基本上是不可能的,但动态语言是可以,意味着软件已经部署到服务器上了,但只要作很少的更改,只好直接修改这部分的代码,就可立即实现变化,不用整个软件重新加载。

     2)在machin learning里根据用户使用这个软件频率,以及方式,可动态地修改代码,适应用户的变化。

 eval()的安全性问题,总结来说就是eval函数将字符串转换成对象并运行,比如你对文件的增删改成

eval("__import__(‘os‘).system(‘ls‘)")#打印出当前文件夹下的所有文件

 json模块

  序列化

  我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening等等,都是一个意思。

序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上。

反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling。

【1】dumps()

  将“对象”转换成“字符串类型”

import jsondic = {‘name‘: ‘hugo‘,‘age‘: 18}print(type(dic))#<class ‘dict‘>st = json.dumps(dic)print(st)#<class ‘dict‘>print(type(st))#<class ‘dict‘>

【2】loads() 将“字符串”转换成“对象”

import jsondic = {‘name‘: ‘hugo‘,‘age‘: 18}print(type(dic))#<class ‘dict‘>dumps = json.dumps(dic)#<class ‘dict‘>print(dumps)#<class ‘dict‘>print(type(dumps))loads = json.loads(dumps)print(loads)#<class ‘dict‘>print(type(loads))#<class ‘dict‘>

【3】dump()   json.dump()用于将“对象”(dict类型等)的数据转成str,并写入到json文件中。 

######序列化
import jsondic = {‘name‘: ‘hugo‘, ‘age‘: 18}print(type(dic))#<class ‘dict‘>st = json.dumps(dic)print(type(st))#<class ‘str‘>f = open("json文件", ‘w‘)f.write(st) ?#######相当于:json.dump(dic,f)f.close()

  json文件的内容如下:

{"name": "hugo", "age": 18}

【4】load() 用于从json文件中读取数据。

#####反序列化
import jsonf = open("json文件")data = json.loads(f.read())######相当于data=json.load(f)print(data)#{‘name‘: ‘hugo‘, ‘age‘: 18}

  注:通过eval()将数据转换成字符串也可以,但是由于eval()的安全性,不建议使用

json 模块

原文地址:https://www.cnblogs.com/Jiangchuanwei/p/8550902.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved