鱼C论坛

 找回密码
 立即注册
查看: 1315|回复: 5

[已解决]字符串处理,json格式化

[复制链接]
发表于 2022-1-26 21:43:57 | 显示全部楼层 |阅读模式
50鱼币
接口返回的数据键名缺少双引号,无法转换成json格式,
例:msg部分缺少双引号,应该是“msg”
  1. {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.png


最佳答案
2022-1-26 21:43:58
  1. import re


  2. 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}'


  3. def handle(s):
  4.     while a := re.search(r"({|,)(\w*):", s):
  5.         b = list(s)
  6.         b.insert(a.span()[0] + 1, '"')
  7.         b.insert(a.span()[1], '"')
  8.         s = "".join(b)

  9.     return s


  10. handle(data)
复制代码

最佳答案

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-1-26 21:43:58 | 显示全部楼层    本楼为最佳答案   
  1. import re


  2. 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}'


  3. def handle(s):
  4.     while a := re.search(r"({|,)(\w*):", s):
  5.         b = list(s)
  6.         b.insert(a.span()[0] + 1, '"')
  7.         b.insert(a.span()[1], '"')
  8.         s = "".join(b)

  9.     return s


  10. handle(data)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-1-27 00:15:28 | 显示全部楼层

你的思路我理解了,很不错,但我孤陋寡闻,请教一下:while a := re.search(r"({|,)(\w*):", s):
这 := 是哪里的语法,不报错? 是python2的写法?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-1-27 11:11:37 | 显示全部楼层
阿奇_o 发表于 2022-1-27 00:15
你的思路我理解了,很不错,但我孤陋寡闻,请教一下:while a := re.search(r"({|,)(\w*):", s):
这 :=  ...

不是的,Python 3.8 才出现

:= 运算符(海象运算符)是赋值同时也返回值

比如,
  1. >>> a = 10 # 没返回值
  2. >>> if (b := 20) == 20: print(b) # 其中,b 赋值为 20,而 (b := 20) 返回 20(说白了就是等于20)
  3. 20
  4. >>> b
  5. 20
复制代码

注意,海象运算符只能在 if 的条件里(if a:=10 > 5: xxx)
或是在 while 的条件里 (while a := 10 > 5: xxx)
或是在列表推导式里。

我其实也说不清楚,你可以百度“python 海象运算符”
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-1-27 12:16:26 | 显示全部楼层
ckblt 发表于 2022-1-27 11:11
不是的,Python 3.8 才出现

:= 运算符(海象运算符)是赋值同时也返回值

我的python 3.7,原来如此。。 "海象运算符",哈哈,够形象的 :=
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-1-27 15:12:22 From FishC Mobile | 显示全部楼层
阿奇_o 发表于 2022-1-27 12:16
我的python 3.7,原来如此。。 "海象运算符",哈哈,够形象的 :=

pascal里面的赋值语句
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-30 13:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表