json格式在python中的类型转换

  最近在进行数据分析时,处理 json格式的数据遇到了坑,主要对 json 本身不了解,导致解析过后python不识别,我还纳闷,同样的东西,为啥格式不对,原来 Nonenull 也是有区别的。不过使用 eval() 还真挺好使,就是需要考虑一些安全性问题。

  JSON: JavaScript Object Notation ( JavaScript 对象表示法), JSON 是存储和交换文本信息的语法,类似 XMLJSONXML 更小、更快,更易解析。

  JSON 语法是 JavaScript 语法的子集:

  • 数据在名称/值对中

  • 数据由逗号分隔

  • 大括号 { } 保存对象

  • 中括号 [ ] 保存数组,数组可以包含多个对象

  JSON 数据的书写格式是:

key : value

  JSONvalue 值可以是:数字(整数或浮点数)字符串(在双引号中)逻辑值(true 或 false)数组(在中括号中)对象(在大括号中)null ,需要注意的是,key 值必须加 双引号value 中,字符串必须加 双引号 ,其他类型不要加 双引号 ,以上写法必须严格遵循,否则将不会被判定为 JSON 格式。

实例演示:

使用 eval():

1
2
3
4
5
6
def get_fea_text(data_str):
data_str=eval(data_str)
if len(data) > 0:
return data_str[0]['text']
else:
return None

使用 json 库:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import json

def get_fea_text(data_str):
# 将文字中的"前加 \ 进行转义
data = data.replace('"','\\"')
# 将单引号' 转为 双引号 "
data = data.replace('\'','\"')
# 将 None 转为 null
data = data.replace('None','null')
# 将字符串转换为 json 对象
data=json.loads(data)
if len(data) > 0:
return data[0]['text']
else:
return None

注意: 因为 json 解析的缘故,在解析过程中,会将 null 转化为 NonePython 解释器虽然可以对单双引号没有特定的区分,但是在 json 语句中必须使用 双引号 “” ,也要注意在字符串中如果本身含有 双引号,要加 反斜杠 \ 进行字符的转义,否则也会转换过程也会出错。