【Python】浅谈python中的json

前言 
   最近一直在做开发相关的工作--基于Django的web 平台,其中需要从model层传输数据到view 层做数据展示或者做业务逻辑处理。我们采用通用的Json格式--Json(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于阅读和程序解析。

 认识Json
  2.1 Json 结构
   常见的Json格式为 “名称/值”对的集合,其中 值可以是对象,列表,字典,字符串等等。比如

  1. backup_data = {"back_to_host": "dbbk0",
  2.                         "ip_address": "10.10.20.3",
  3.                         "host_name": "rac4",
  4.                         "port": 3306}

  2.2 使用Json
  Python的Json模块序列化与反序列化的过程分别是 编码和解码。这两个过程涉及到两组不同的函数
  编码 把一个Python对象编码转换成Json字符串,json.dumps(data)/json.dump(data,file_handler)
  解码 把Json格式字符串解码转换成Python对象,json.loads(data)/json.load(file_handler)
  在python中要使用Json模块做相关操作,必须先导入:

  1. import Json 

  2.3 主要函数
  编码函数主要有 json.dumps(data)/json.dump(data,file_handler)
   json.dumps()的参数是将python对象转换为字符串,如使用json.dumps序列化的对象json_dumps=json.dumps({'a':1, 'b':2}) ,json_dumps='{"b": 2, "a": 1}'
   json.dump 是将内置类型序列化为json对象后写入文件。
 解码函数主要由json.loads(data)/json.load(file_handler)  
    json.loads的参数是内存对象,把Json格式字符串解码转换成Python对象,json_loads=json.loads(d_json)  #{ b": 2, "a": 1},使用load重新反序列化为dict
    json.load()的参数针对文件句柄,比如本地有一个文件/tmp/test.json  json_load=json.load(open('/tmp/test.json'))

具体案例参考如下:

  1. In [3]: data={"back_to_host": "rac1",
  2.    ...: "ip_address": "10.215.20.3",
  3.    ...: "host_name": "rac3",
  4.    ...: "port": 3306}
  5. In [7]: json_str=json.dumps(data)
  6. In [8]: print json_str
  7. {"ip_address": "10.215.20.3", "back_to_host": "rac1", "host_name": "rac3", "port": 3306}
  8. In [9]: json_loads=json.load(json_str)
  9. ---------------------------------------------------------------------------
  10. AttributeError Traceback (most recent call last)
  11. <ipython-input-9-180506f16431> in <module>()
  12. ----> 1 json_loads=json.load(json_str)
  13. /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.pyc in load(fp, encoding, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)
  14.     284
  15.     285 ""

注意 从上面的报错信息来看 json.loads 传参是字符串类型,并不是文件句柄,没有 read()属性。

  1. In [10]: json_loads=json.loads(json_str)
  2. In [11]: print json_loads
  3. {u'back_to_host': u'rac1', u'ip_address': u'10.215.20.3', u'host_name': u'rac3', u'port': 3306}
  4. In [12]: type(json_loads)
  5. Out[12]: dict
  6. In [13]: type(json_str)
  7. Out[13]: str

利用dump 将数据写入 dump.json

  1. In [17]: with open('/tmp/dump.json','w') as f:
  2.     ...: json.dump(json_str,f)
  3.     ...:
  4. yangyiDBA:~ yangyi$ cat /tmp/dump.json
  5. "{\"ip_address\": \"10.10.20.3\", \"back_to_host\": \"rac1\", \"host_name\": \"rac3\", \"port\": 3306}"
  6. yangyiDBA:~ yangyi$

利用json.load 将dump.sjon的数据读出来并赋值给 data 

  1. In [18]: with open('/tmp/dump.json','r') as f:
  2.     ...: data=json.load(f)
  3.     ...:
  4. In [19]: print data
  5. {"ip_address": "10.10.20.3", "back_to_host": "rac1", "host_name": "rac3", "port": 3306}


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/810944.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MATLAB源码-第10期】基于matlab的pi/4DQPSK,π/4DQPSK的误码率BER理论和实际对比仿真。

1、算法描述 蓝牙是一种被广泛应用的无线通信标准&#xff0c;工作在2.4GHz-2.4835GHz频段范围&#xff0c;所用的调制方式有:GFSK&#xff0c;PI/4-DQPSK。北美第二代数字蜂窝移动通信系统D-AMPS和日本的JDC蜂窝系统均采用PI /4-DQPSK&#xff0c;欧洲的GSM系统采用GMSK。PI /…

水质溶解氧控制器的优势特点

在全球水资源日益紧缺、水质问题愈发严重的现状下&#xff0c;如何科学有效地监测与管理水体溶解氧含量&#xff0c;成为了关乎生态环境保护、水生生物生存以及人类饮水安全的重要课题。溶解氧作为衡量水体自净能力、判断水体是否缺氧、评估水生生态系统健康状况的一项关键指标…

类和对象【一】类和对象简介

文章目录 C的类与C语言结构体的区别【引入类】类的定义类体中的成员函数的实现类中的访问限定符C中class和struct的区别 类的作用域类的实例化类中成员的存储位置类的大小 C的类与C语言结构体的区别【引入类】 类里面不仅可以定义变量还可以定义函数 例 类具有封装性【将在该…

关于nvm node.js的按照

说明&#xff1a;部分但不全面的记录 因为过程中没有截图&#xff0c;仅用于自己的学习与总结 过程中借鉴的优秀博客 可以参考 1,npm install 或者npm init vuelatest报错 2&#xff0c;了解后 发现是nvm使用的版本较低&#xff0c;于是涉及nvm卸载 重新下载最新版本的nvm 2…

云原生数据库海山(He3DB)PostgreSQL版核心设计理念

本期深入解析云原生数据库海山PostgreSQL版&#xff08;以下简称“He3DB”&#xff09;的设计理念&#xff0c;探讨在设计云原生数据库过程中遇到的工程挑战&#xff0c;并展示He3DB如何有效地解决这些问题。 He3DB是移动云受到 Amazon Aurora 论文启发而独立自主设计的云原生数…

Excel---一个工作簿中的多个sheet合并成一个PDF

0 Preface/Foreword 1 操作方法 1.1 方法一 文件》 导出 》创建PDF/XPS 》 选项 》发布内容 》“整个工作簿” 1.2 方法二 文件》 打印》 打印机选项中&#xff0c;选择一种PDF阅读器 》设置选项中&#xff0c;选择打印整个工作簿。

三步就能在OpenHarmony中实现车牌识别

介绍 本车牌识别项目是基于开源项目 EasyPR&#xff08;Easy to do Plate Recognition&#xff09;实现。EasyPR 是一个开源的中文车牌识别系统&#xff0c;基于 OpenCV 开源库开发。 本项目使用润和 HiSpark Taurus AI Camera(Hi3516DV300) 摄像头开发板套件(以下简称 Hi351…

对拍器/对数器 赛前抱佛脚

“对拍器/对数器的使用前提是该题你会暴力解法&#xff0c;如果不会&#xff0c;那么对拍器/对数器也没啥用。” 对拍器/对数器 应用背景 你有一个绝对对的暴力cpp代码&#xff0c;但时间会T&#xff0c;只适用于小范围的数据。所以你写了一个聪明的非暴力cpp代码&#xff0c…

设计模式: 行为型之中状态模式(20)

状态模式概述 状态模式&#xff08;State Pattern&#xff09;是一种行为设计模式&#xff0c;它允许对象在内部状态改变时改变其行为状态模式通过为每个状态定义一个类&#xff0c;使得对象在其内部状态改变时&#xff0c;可以改变其行为 状态模式应用 // 定义状态接口 int…

小红书2020校招算法笔试题卷一 编程题no.3 击败魔物

题目 击败魔物 薯队长来到了迷宫的尽头&#xff0c;面前出现了N只魔物&#xff0c;Hi表示第i只魔物的血量&#xff0c;薯队长需要在T个回合内击败所有魔物才能获胜。每个回合薯队长可 以选择物理攻击一只魔物&#xff0c;对其造成1点伤害&#xff08;物理攻击次数无上限&#x…

【ctf.show】获得百分之百的快乐

1.打开靶场 2.根据页面代码&#xff0c;get请求值只能小于4位数&#xff0c;否则会回显hack&#xff01; 尝试后确实是这样的&#xff1a; 请求值小于4位数&#xff0c;页面无变化&#xff1a; 发送请求值ls查看内容 3.根据2返回的值&#xff0c;发送值为?1>nl 创建一个nl…

vivado 使用基本触发器模式

使用基本触发器模式 基本触发器模式用于描述触发条件 &#xff0c; 即由参与其中的调试探针比较器组成的全局布尔公式。当“触发器模式 (Trigger Mode) ”设置为 BASIC_ONLY 或 BASIC_OR_TRIG_IN 时 &#xff0c; 即启用基本触发器模式。使用“基本触发器设置 (Basic Trig…

Mysql 常用关键字总结

MySQL关键字是指在MySQL中具有特殊含义和功能的保留字。以下是一些常用的MySQL关键字及其作用&#xff1a; 1. SELECT&#xff1a;用于从数据库中检索数据。 2. INSERT&#xff1a;用于向数据库中插入新的行。 3. UPDATE&#xff1a;用于更新数据库中的现有数据。 4. DELETE&a…

【面试题】细说mysql中的各种锁

前言 作为一名IT从业人员&#xff0c;无论你是开发&#xff0c;测试还是运维&#xff0c;在面试的过程中&#xff0c;我们经常会被数据库&#xff0c;数据库中最经常被问到就是MySql。当面试官问MySql的时候经常会问道一个问题&#xff0c;”MySQL中有哪些锁&#xff1f;“当我…

数据结构-----Lambda表达式

文章目录 1 背景1.1 Lambda表达式的语法1.2 函数式接口 2 Lambda表达式的基本使用2.1 语法精简 3 变量捕获3.1 匿名内部类3.2 匿名内部类的变量捕获3.3 Lambda的变量捕获 4 Lambda在集合当中的使用4.1 Collection接口4.2 List接口4.3 Map接口 HashMap 的 forEach() 5 总结 1 背…

第十三届蓝桥杯真题:x进制减法,数组切分,gcd,青蛙过河

目录 x进制减法 数组切分 gcd 青蛙过河 x进制减法 其实就是一道观察规律的题。你发现如果a这个位置上的数x&#xff0c;b这个位置上的数是y&#xff0c;那么此位置至少是max(x,y)1进制。一定要把位置找对啊 #include <bits/stdc.h> using namespace std; typedef l…

蓝桥杯20年第十一届国赛-答疑|贪心

题目链接&#xff1a; 蓝桥杯2020年第十一届国赛真题-答疑 - C语言网 (dotcpp.com) 思路&#xff1a; 这道题 计算的是时刻之和&#xff0c;写出这个时刻之和的计算式子&#xff0c;以下的si&#xff0c;ai的i为任意次序答疑的同学编号 &#xff0c;不等于输入的顺序 时刻之…

如何卸载干净 IDEA(图文讲解)

更新时间 2022-12-20 11:一则或许对你有用的小广告 星球 内第一个项目&#xff1a;全栈前后端分离博客项目&#xff0c;演示地址&#xff1a;Weblog 前后端分离博客, 1.0 版本已经更新完毕&#xff0c;正在更新 2.0 版本。采用技术栈 Spring Boot Mybatis Plus Vue 3.x Vit…

没有网没有移动存储的情况下两台电脑如何互相传输数据

无网无移动存储情况下两台电脑数据互传探秘 一、直连网线传输数据二、局域网文件共享其他 在信息化时代的今天&#xff0c;电脑作为重要的数据处理工具&#xff0c;在日常生活和工作中扮演着不可或缺的角色。然而&#xff0c;有时我们会遇到一些特殊情况&#xff0c;如没有网络…

如何开辟动态二维数组(C语言)

1. 开辟动态二维数组 C语言标准库中并没有可以直接开辟动态二维数组的函数&#xff0c;但我们可以通过动态一维数组来模拟动态二维数组。 二维数组其实可以看作是一个存着"DataType []"类型数据的一维数组&#xff0c;也就是存放着一维数组地址的一维数组。 所以&…