鱼C论坛

 找回密码
 立即注册
查看: 2567|回复: 20

字符串处理json数据格式化

[复制链接]
发表于 2022-1-26 20:52:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
接口返回的数据键名缺少双引号,无法转换成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}

数据

数据
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-26 21:03:51 From FishC Mobile | 显示全部楼层

回帖奖励 +50 鱼币

json就是这个样子的,key并没有双引号包裹
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

发表于 2022-1-26 21:05:24 | 显示全部楼层
wp231957 发表于 2022-1-26 21:03
json就是这个样子的,key并没有双引号包裹

不是,那是js里的object,json是双引号包裹的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-26 21:17:33 | 显示全部楼层
wp231957 发表于 2022-1-26 21:03
json就是这个样子的,key并没有双引号包裹

是有的,因为我转json会报错,我加上双引号后没有报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-26 21:17:37 From FishC Mobile | 显示全部楼层
ckblt 发表于 2022-1-26 21:05
不是,那是js里的object,json是双引号包裹的

jdon.loads导一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-26 21:18:33 | 显示全部楼层

直接用loads会报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-26 21:18:43 From FishC Mobile | 显示全部楼层
ckblt 发表于 2022-1-26 21:05
不是,那是js里的object,json是双引号包裹的

python里面的字典
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-26 21:19:17 From FishC Mobile | 显示全部楼层
风船野 发表于 2022-1-26 21:18
直接用loads会报错

代码?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-26 21:24:17 | 显示全部楼层
本帖最后由 ckblt 于 2022-1-26 21:26 编辑
dict = eval(data)
试试这样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-26 21:24:40 | 显示全部楼层

就把他当字符串json.loads(res.text),会报错:Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-26 21:26:26 | 显示全部楼层
我的方法也不行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-26 21:37:27 | 显示全部楼层
ckblt 发表于 2022-1-26 21:26
我的方法也不行

是的,尝试了,不行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-26 21:42:13 | 显示全部楼层
非常急,写了这些
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()[0]+1, '"')
        b.insert(a.span()[1], '"')
        s = ''.join(b)

    return s


print(a(string))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-26 21:43:23 | 显示全部楼层
本帖最后由 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()[0] + 1, '"')
        b.insert(a.span()[1], '"')
        s = "".join(b)

    return s


handle(data)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-26 21:44:34 From FishC Mobile | 显示全部楼层
风船野 发表于 2022-1-26 21:24
就把他当字符串json.loads(res.text),会报错:Expecting property name enclosed in double quotes: line ...

应该不用13楼那么复杂,你把网址发过来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-26 21:48:11 | 显示全部楼层
wp231957 发表于 2022-1-26 21:44
应该不用13楼那么复杂,你把网址发过来

http://www.hnloudi.gov.cn/siteap ... f72a752039a72428dee
这是接口,post请求
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-26 21:52:31 | 显示全部楼层

这个可以的,就是用正则有的麻烦,感谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-27 10:07:47 | 显示全部楼层
风船野 发表于 2022-1-26 21:48
http://www.hnloudi.gov.cn/siteapps/ldxxWeb/getInfoById?id=b86bd915d6964f72a752039a72428dee
这是接 ...

找到一种  相对来说  既麻烦也简单的办法

就是使用DEMJSON模块   但是这个模块安装有些麻烦(我不知道为啥  直接PIP 就只给装1.6版本的
而这个版本的 无法运行,一定要安装2.2.4的)
下面见  测试案例  以及安装依附

演示1.png
PIPLIST.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-27 18:01:56 | 显示全部楼层
wp231957 发表于 2022-1-27 10:07
找到一种  相对来说  既麻烦也简单的办法

就是使用DEMJSON模块   但是这个模块安装有些麻烦(我不知道 ...

nice
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-28 01:15:22 | 显示全部楼层
可以使用正则预处理一下,可以看到接口返回数据的共性是键都为英文,故可以构造出正则 ([a-zA-Z]+):
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'([a-zA-Z]+):')
result = json.loads(partern.sub(r'"\1":', data))

print(result)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-6 04:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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