字符串处理json数据格式化
接口返回的数据键名缺少双引号,无法转换成json格式,例:msg部分缺少双引号,应该是“msg”
{msg:"",timestampStr:"2022-01-26 20:48:37",headers:{},timestamp:1643201317238,data:{ID:"b86bd915d6964f72a752039a72428dee",TITLE:"特教学校左面人行道杂草处理",CREATETIME:"2021-09-18 17:25:49",NAME:"mmm",CONTENT:"领导们好,最近学校开学,上学的人行道被树枝遮挡,靠右边的车道又被大型货车违规占道,学生们只能从马路中间行走,给上下学自行回家的学生们带来很大的安全隐患。希望安排工作人员把人行楼梯上的树枝处理一下。感激不尽!!!"},status:0}
json就是这个样子的,key并没有双引号包裹 wp231957 发表于 2022-1-26 21:03
json就是这个样子的,key并没有双引号包裹
不是,那是js里的object,json是双引号包裹的 wp231957 发表于 2022-1-26 21:03
json就是这个样子的,key并没有双引号包裹
是有的,因为我转json会报错,我加上双引号后没有报错 ckblt 发表于 2022-1-26 21:05
不是,那是js里的object,json是双引号包裹的
jdon.loads导一下 wp231957 发表于 2022-1-26 21:17
jdon.loads导一下
直接用loads会报错 ckblt 发表于 2022-1-26 21:05
不是,那是js里的object,json是双引号包裹的
python里面的字典 风船野 发表于 2022-1-26 21:18
直接用loads会报错
代码? 本帖最后由 ckblt 于 2022-1-26 21:26 编辑
dict = eval(data)
试试这样 wp231957 发表于 2022-1-26 21:19
代码?
就把他当字符串json.loads(res.text),会报错:Expecting property name enclosed in double quotes: line 1 column 2 (char 1) 我的方法也不行 ckblt 发表于 2022-1-26 21:26
我的方法也不行
是的,尝试了,不行 非常急,写了这些
import re
string = '{msg:"",timestampStr:"2022-01-26 20:48:37",headers:{},timestamp:1643201317238,data:{ID:"b86bd915d6964f72a752039a72428dee",TITLE:"特教学校左面人行道杂草处理",CREATETIME:"2021-09-18 17:25:49",NAME:"mmm",CONTENT:"领导们好,最近学校开学,上学的人行道被树枝遮挡,靠右边的车道又被大型货车违规占道,学生们只能从马路中间行走,给上下学自行回家的学生们带来很大的安全隐患。希望安排工作人员把人行楼梯上的树枝处理一下。感激不尽!!!"},s:0}'
def a(s: str):
while a := re.search(r"({|,)(\w*):", s):
b = list(s)
b.insert(a.span()+1, '"')
b.insert(a.span(), '"')
s = ''.join(b)
return s
print(a(string))
本帖最后由 ckblt 于 2022-1-26 22:04 编辑
改良
import re
data = '{msg:"",timestampStr:"2022-01-26 20:48:37",headers:{},timestamp:1643201317238,data:{ID:"b86bd915d6964f72a752039a72428dee",TITLE:"特教学校左面人行道杂草处理",CREATETIME:"2021-09-18 17:25:49",NAME:"mmm",CONTENT:"领导们好,最近学校开学,上学的人行道被树枝遮挡,靠右边的车道又被大型货车违规占道,学生们只能从马路中间行走,给上下学自行回家的学生们带来很大的安全隐患。希望安排工作人员把人行楼梯上的树枝处理一下。感激不尽!!!"},s:0}'
def handle(s):
while a := re.search(r"({|,)(\w*):", s):
b = list(s)
b.insert(a.span() + 1, '"')
b.insert(a.span(), '"')
s = "".join(b)
return s
handle(data) 风船野 发表于 2022-1-26 21:24
就把他当字符串json.loads(res.text),会报错:Expecting property name enclosed in double quotes: line ...
应该不用13楼那么复杂,你把网址发过来 wp231957 发表于 2022-1-26 21:44
应该不用13楼那么复杂,你把网址发过来
http://www.hnloudi.gov.cn/siteapps/ldxxWeb/getInfoById?id=b86bd915d6964f72a752039a72428dee
这是接口,post请求 ckblt 发表于 2022-1-26 21:43
改良
这个可以的,就是用正则有的麻烦,感谢。{:10_288:} 风船野 发表于 2022-1-26 21:48
http://www.hnloudi.gov.cn/siteapps/ldxxWeb/getInfoById?id=b86bd915d6964f72a752039a72428dee
这是接 ...
找到一种相对来说既麻烦也简单的办法
就是使用DEMJSON模块 但是这个模块安装有些麻烦(我不知道为啥直接PIP 就只给装1.6版本的
而这个版本的 无法运行,一定要安装2.2.4的)
下面见测试案例以及安装依附
wp231957 发表于 2022-1-27 10:07
找到一种相对来说既麻烦也简单的办法
就是使用DEMJSON模块 但是这个模块安装有些麻烦(我不知道 ...
nice 可以使用正则预处理一下,可以看到接口返回数据的共性是键都为英文,故可以构造出正则 (+):
import re
import json
data = '{msg:"",timestampStr:"2022-01-26 20:48:37",headers:{},timestamp:1643201317238,data:{ID:"b86bd915d6964f72a752039a72428dee",TITLE:"特教学校左面人行道杂草处理",CREATETIME:"2021-09-18 17:25:49",NAME:"mmm",CONTENT:"领导们好,最近学校开学,上学的人行道被树枝遮挡,靠右边的车道又被大型货车违规占道,学生们只能从马路中间行走,给上下学自行回家的学生们带来很大的安全隐患。希望安排工作人员把人行楼梯上的树枝处理一下。感激不尽!!!"},status:0}'
partern = re.compile(r'(+):')
result = json.loads(partern.sub(r'"\1":', data))
print(result)
页:
[1]
2