如何在python中将字符串转换成json

  介绍

今天就跟大家聊聊有关如何在python中将字符串转换成json,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

<强> 1,通过json来转换:

拷贝[1]:import  json   [2]:拷贝,mes =, & # 39; {“InsId": 2,“name":,“lege-happy",,“CreationTime":,“2019 - 04 - 23 t03:18:02z"} & # 39;   [3]:拷贝,mes_to_dict =, json.loads (mes)   [4]:拷贝,print 类型(mes_to_dict)   & lt; type  & # 39; dict # 39;在

以上的方式转换是没问题的,但是加入mes的格式为<代码> mes=& # 39; {“InsId": 2,“name":“lege-happy",“CreationTime":“2019 - 04 - 23 t03:18:02z"} & # 39;> 拷贝[5]:import  json      [6]:拷贝,mes =,“{& # 39; InsId& # 39;,, 1,, & # 39;名字# 39;:,& # 39;lege-error& # 39;,, & # 39; CreationTime& # 39;:, & # 39; 2019 - 04 - 24 t03:18:02z& # 39;},      [7]:拷贝,mes_to_dict =, json.loads (mes)   ---------------------------------------------------------------------------   ValueError ,,,,,,,,,,,,,,, Traceback  (most  recent  call 最后)   & lt; ipython -输入- 7 - 77264851 - f35b>,拷贝& lt; module> ()   - - - - -祝辞,1,mes_to_dict =, json.loads (mes)/系统/图书馆/框架/Python.framework/版本/2.7/lib/python2.7/json/__init__.pyc 负载拷贝(编码,年代,还以为,cls, object_hook,, parse_float,, parse_int,, parse_constant,, object_pairs_hook,, * *千瓦)   336年,,,,,,,,,parse_int  is  None 以及parse_float  is  None    337年,,,,,,,,,parse_constant  is  None 以及object_pairs_hook  is  None 以及not 千瓦):   ——祝辞,338,,,,,return  _default_decoder.decode (s)   339年,,,,,if  cls  is 没有:   340年,,,,,,,cls =JSONDecoder/系统/图书馆/框架/Python.framework/版本/2.7/lib/python2.7/json/decoder.pyc 拷贝解码(自我,,,,_w)   ,364年   365年,,,,,,,,,,   ——祝辞,366,,,,,obj,,最终获得=,self.raw_decode(年代,,idx=_w (s), 0)指标())最终   367,,,,,,,最终获得=,_w(,,)指标()最终   368年,,,,,,,if 最终获得!=,len (s):/系统/图书馆/框架/Python.framework/版本/2.7/lib/python2.7/json/decoder.pyc  raw_decode拷贝(自我,,,,idx)   380年,,,,,,,,,,   381,,,,,,,试一试:   ——祝辞,382,,,,,,,obj,,最终获得=,self.scan_once(年代,,idx)   383年,,,,,,,except 抛出StopIteration:   384年,,,,,,,,,raise  ValueError (“No  JSON  object  could  be  decoded")      ValueError: Expecting  property 名称:,line  1, column  2, (char  1)

所以使用json进行转换存在一个潜在的限制:

由于json语法规定数组或对象之中的字符串必须使用双引号,不能使用单引号(官网上有一段描述是“一个字符串是一个零个或多个Unicode字符序列,用双引号,使用反斜杠转义”),因此上面的转换是错误的:

通过eval来转换:

拷贝[8]:,mes =, & # 39; {“InsId": 2,“name":,“lege-happy",,“CreationTime":,“2019 - 04 - 23 t03:18:02z"} & # 39;      [9]:拷贝,mes_dict =, eval (mes)      [10]:拷贝,print 类型(mes_dict)   & lt; type  & # 39; dict # 39;比;      [11]拷贝:      [11]:拷贝,mes =, mes =,“{& # 39; InsId& # 39;,, 1,, & # 39;名字# 39;:,& # 39;lege-error& # 39;,, & # 39; CreationTime& # 39;:, & # 39; 2019 - 04 - 24 t03:18:02z& # 39;},      [12]:拷贝,mes_dict =, eval (mes)      [13]:拷贝,print 类型(mes_dict)   & lt; type  & # 39; dict # 39;在

上面的例子可以看出进行转换的时候不存在使用json转换的问题,但是我们需要注意的是使用eval会存在安全问题,比如:

串型的输入直接计算。比如,她会将& # 39;1 + 1 & # 39;的计算串直接计算出结果。

拷贝[14]:,value =, eval (raw_input (& # 39; please  input  a  value 字符串:& # 39;))   please  input  a  value 字符串:2 +,2      [15]:拷贝值   [15]:,4

从上面来看,eval功能可谓非常强大,即可以做字符串与列表、元组、dict之间的类型转换,还可以做计算器使用!更有甚者,可以对她能解析的字符串都做处理,而不顾忌可能带来的后果!所以说eval强大的背后,是巨大的安全隐患! ! !

比如说用户恶意输入下面的字符串:

开放(" # 39;D://filename.txt& # 39;,, & # 39; " # 39;) .read ()   __import__(& # 39;操作系统# 39;)系统(& # 39;dir # 39;)   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

如何在python中将字符串转换成json