添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

在写接口测试框架时,避免不了数据类型的转换,比如强制转换string类型,比如转json类型

一、str转json

str转为json格式,一定需要保证这个str的格式是json string

1.1 使用json.loads

字符串str转json对象,需要使用json模块的loads函数

import json
str1 = '{"accessToken": "521de21161b23988173e6f7f48f9ee96e28", "User-Agent": "Apache-HttpClient/4.5.2 (Java/1.8.0_131)"}'
json1 = json.loads(str1)
print(json1)
print(type(json1))
{'accessToken': '521de21161b23988173e6f7f48f9ee96e28', 'User-Agent': 'Apache-HttpClient/4.5.2 (Java/1.8.0_131)'}
<class 'dict'>

1.2 使用eval

eval的作用:将字符串str当成有效的表达式来求值并返回计算结果

即可以通过eval可以把listtupledictstring相互转化

str1 = "[[1,2], [3,4], [5,6], [7,8], [9,0]]"
json1 = eval(str1)
print(type(json1))
print(json1)
<class 'list'>
[[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]]
  • tuple
str1 = "([1,2], [3,4], [5,6], [7,8], (9,0))"
json1 = eval(str1)
print(type(json1))
print(json1)
<class 'tuple'>
([1, 2], [3, 4], [5, 6], [7, 8], (9, 0))
str1 = "{'a': 1, 'b': 2}"
json1 = eval(str1)
print(type(json1))
print(json1)
<class 'dict'>
{'a': 1, 'b': 2}
 

注意:
eval()可以通过运行系统的命令
比如:eval(“import(‘os’).startfile(‘notepad.exe’)”) #启动记事本程序
为了保证安全,当需要用户输入时,需要对用户的输入内容进行敏感字符检查和过滤

1.3 使用literal_eval

和eval使用方式相同,都可以将字符串str解析成list、tuple或dict,并且避免eval安全性的问题

import ast
str1 = "{'a': 1, 'b': 2}"
json1 = ast.literal_eval(str1)
print(type(json1))
print(json1)
<class 'dict'>
{'a': 1, 'b': 2}

二、json转str

2.1 使用json.dumps

import json
json1 = {"accessToken": "521de21161b23988173e6f7f48f9ee96e28", "User-Agent": "Apache-HttpClient/4.5.2 (Java/1.8.0_131)"}
str1 = json.dumps(json1)
print(str1)
print(type(str1))
{"accessToken": "521de21161b23988173e6f7f48f9ee96e28", "User-Agent": "Apache-HttpClient/4.5.2 (Java/1.8.0_131)"}
<class 'str'>
  • 参数补充
    json.dumps提供了一些参数,可以对转换的字符串进行特殊的处理
import json
json1 = {"accessToken": "521de21161b23988173e6f7f48f9ee96e28", "User-Agent": "Apache-HttpClient/4.5.2 (Java/1.8.0_131)"}
str1 = json.dumps(json1, sort_keys=True, indent=4, separators=(',', ':'))
str2 = json.dumps(json1)
我们来对这几个参数进行下解释:
sort_keys:是否按照字典排序(a-z)输出,True代表是,False代表否。
indent=4:设置缩进格数,一般由于Linux的习惯,这里会设置为4。
separators:设置分隔符,在dic = {'a': 1, 'b': 2, 'c': 3}这行代码里可以看到冒号和逗号后面都带了个空格,这也是因为Python的默认格式也是如此,
            如果不想后面带有空格输出,那就可以设置成separators=(',', ':'),如果想保持原样,可以写成separators=(', ', ': ')。

2.1 使用str

可以使用强制类型转换将json格式转成str格式

json1 = {'name':'洛','age':'22'}
str1 = json.dumps(json1)
print(str1)
print(type(str1))
{'name': '洛', 'age': '22'}
<class 'str'>

三、踩坑问题

写这篇文章主要是为了mark一个问题,在str转json时,str格式引号问题导致失败报错

看看下面这段代码

import json
str1 = "{'accessToken': '521de21161b23988173e6f7f48f9ee96e28', 'User-Agent': 'Apache-HttpClient/4.5.2 (Java/1.8.0_131)'}"
json1 = json.loads(str)
print(json1)
print(type(json1))

咋一看没啥问题,但是出现错误

json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)

为什么呢?

字符串中,双引号在外围,单引号在内嵌,导致转换失败,可以使用json5进行处理

欢迎关注个人公众号
在这里插入图片描述

在写接口测试框架时。避免不了数据类型的转换,比如强制转换string类型,比如转json类型str转jsonpython字符串转json对象,需要使用json模块的loads函数import jsonstr = '{"accessToken": "521de21161b23988173e6f7f48f9ee96e28", "User-Agent": "Apache-HttpClient/4.5.2
在写接口测试框架时。避免不了数据类型的换,比如强制string类型,比如json类型 strjson python字符串json对象,需要使用json模块的loads函数 import json str = '{"accessToken": "521de21161b23988173e6f7f48f9ee96e28", "User-Agent": "Apache-HttpClient/4.5.2 (Java/1.8.0_131)"}' j = json.loads(str) print(j) print(type(j)) {‘accessToken’: ‘521de211
strjson str换为json格式,前提一定需要保证这个str的格式和json是一致的,即左边最外层是大括号,右边的最外层是大括号。如果不一致,推荐用正则进行拆分至和json格式一致1. 通过json.loads进行换 import json str = '{"name": "御姐", "age": 18}' j = json.loads(str) print(j) print(type(j)) json中内部数据需要用双引号来包围,不能使用单引号 2.jsonstr 使用json.
一、pythonjson的支持 从python2.6开始,python标准库中添加了对json的支持,操作json时,只需要import json即可。 二、python对象换成json字符串 在把python对象换成json字符串时,只需要如下知识即可: 1.python对象到json字符串的换规则: Python
strjson str换为json格式,前提一定需要保证这个str的格式和json是一致的,即左边最外层是大括号,右边的最外层是大括号。如果不一致,推荐用正则进行拆分至和json格式一致 1. 通过json.loads进行换 import json str = '{"key": "wwww", "word": "qqqq"}' j = json.loads(str) print(j) pri...
import json; str='{"info":[],"name":"maomao365.com","url":"maomao365.com","flag":false}' json1=json.loads(str) print(type(json1)) print(json1) 但是Linux下会出现Unicode编码问题,如下图:
1、运用re、jsonjsonpath包解析json思路 (1)re:正则表达式,通过json的形式对症下药,写表达式去解析json; (2)json: 通过json中的json.loads()方法,将str类型为dict类型,运用python字典的数据结构特点去解析json; (3)jsonpath:对比与json包,jsonpath可以根据路径去解析json,比较适合用来解析json中带“[ ]”的数据。 2、三种方式的json解析案例 #json数据样式,本文采用带[]的数据样式
python strjson类型转换 ,即字符串类型和字典类型的换 在写代码时。避免不了数据类型的换,比如强制string类型,比如json类型 (1)strjson python字符串json对象,需要使用json模块的loads函数
js 把字符串json对象的三种方法 不管字符串是否含有义字符,都能换成 Json 对象 1, js自带的eval函数,其中需要添加小括号eval('('+str+')'); function strToJson(str){ var json = eval('(' + str + ')'); return json; 2,new Function形式 function str...
python strjson对象,需要用到json的loads函数。 import json str='{"sel_list":[],"relation":"AND","enabled":false}' j=json.loads(str) jsonstr json字符串,需要用到json的dumps函数 import json j={"sel_list":[],"rel.
python如何将字符串换成json的几种办法 最近在工作中遇到了一个小问题,如果要将字符串型的数据换成dict类型,我第一时间就想到了使用json函数。但是里面出现了一些问题 1、通过json换:Python学习交流群:1004391443 In [1]: import json In [2]: mes = '{"InsId": 2, "name": "lege-happy", "...