请教一个关于python处理json的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教一个关于python处理json的问题相关的知识,希望对你有一定的参考价值。

参考技术A
data :

tg_i":" 1080723 ",
contest_i" : "1001",
sid : "1567515287"
,

tg_id : "1080723",
contest_id : "1001",
sid : "1567515287"

,
total : "2"


然后经过修改,变成:
?

1

"data":"tg_i":"1080723","contest_i":"1001","sid":"1567515287","tg_id":"1080723","contest_id":"1001","sid":"1567515287","total":"2"

格式化为:
?

1
2
3
4
5
6
7
8
9
10
11
12
13


"data" :
"tg_i" : "1080723",
"contest_i" : "1001",
"sid" : "1567515287"
,
"tg_id" : "1080723",
"contest_id" : "1001",
"sid" : "1567515287"

,
"total" : "2"


但是,去用json解析,但是出错:

Python 2.7.3 (default, Apr 10 2012, 23:24:47) [MSC v.1500 64 bit (AMD64)] on win32

Type "copyright", "credits" or "license()" for more information.
>>> import json
>>> json.loads(‘"data":"tg_i":"1080723","contest_i":"1001","sid":"1567515287","tg_id":"1080723","contest_id":"1001","sid":"1567515287","total":"2"’)
Traceback (most recent call last):

File "<pyshell#2>", line 1, in <module>
json.loads(‘"data":"tg_i":"1080723","contest_i":"1001","sid":"1567515287","tg_id":"1080723","contest_id":"1001","sid":"1567515287","total":"2"’)
File "D:\tmp\dev_install_root\Python27_x64\lib\json\__init__.py", line 326, in loads
return _default_decoder.decode(s)
File "D:\tmp\dev_install_root\Python27_x64\lib\json\decoder.py", line 366, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "D:\tmp\dev_install_root\Python27_x64\lib\json\decoder.py", line 382, in raw_decode
obj, end = self.scan_once(s, idx)
ValueError: Expecting property name: line 1 column 9 (char 9)

【折腾过程】
1.刚开始,看了看:
"data":"tg_i":"1080723","contest_i":"1001","sid":"1567515287","tg_id":"1080723","contest_id":"1001","sid":"1567515287","total":"2"
好像也都是正常的,没什么错误。
2.后来才发现,对应着错误的位置:
column 9
是大括号'‘
对应着,格式化的结果中的:
"data" :
中的第一个大括号
然后才发现,原来是,data键的值,此处写成用大括号括起来的:
?

1
2
3
4
5
6
7
8
9
10

"data" :
"tg_i" : "1080723",
"contest_i" : "1001",
"sid" : "1567515287"
,
"tg_id" : "1080723",
"contest_id" : "1001",
"sid" : "1567515287"

,

但是,实际上,data的值,只是两个dict,所以,应该是:
要么改为list:
?

1
2
3
4
5
6
7
8
9
10

"data" : [
"tg_i" : "1080723",
"contest_i" : "1001",
"sid" : "1567515287"
,
"tg_id" : "1080723",
"contest_id" : "1001",
"sid" : "1567515287"

],

要么改为dict:
?

1
2
3
4
5
6
7
8
9
10

"data1" :
"tg_i" : "1080723",
"contest_i" : "1001",
"sid" : "1567515287"
,
"data2" :
"tg_id" : "1080723",
"contest_id" : "1001",
"sid" : "1567515287"
,

对应着,非格式化的内容就是:
?

1

"data":["tg_i":"1080723","contest_i":"1001","sid":"1567515287","tg_id":"1080723","contest_id":"1001","sid":"1567515287"],"total":"2"

和:
?

1

"data1":"tg_i":"1080723","contest_i":"1001","sid":"1567515287", "data2":"tg_id":"1080723","contest_id":"1001","sid":"1567515287","total":"2"

这样才可以正常解析:

>>> json.loads(‘"data":["tg_i":"1080723","contest_i":"1001","sid":"1567515287","tg_id":"1080723","contest_id":"1001","sid":"1567515287"],"total":"2"’)

u’total’: u’2′, u’data’: [u’sid’: u’1567515287′, u’contest_i’: u’1001′, u’tg_i’: u’1080723′, u’tg_id’: u’1080723′, u’contest_id’: u’1001′, u’sid’: u’1567515287′]
>>> json.loads(‘"data1":"tg_i":"1080723","contest_i":"1001","sid":"1567515287", "data2":"tg_id":"1080723","contest_id":"1001","sid":"1567515287","total":"2"’)
u’total’: u’2′, u’data1′: u’sid’: u’1567515287′, u’contest_i’: u’1001′, u’tg_i’: u’1080723′, u’data2′: u’tg_id’: u’1080723′, u’contest_id’: u’1001′, u’sid’: u’1567515287′

【总结】
折腾json的话,前提要了解json的语法和规则。
其次才是用某种语言去处理json。本回答被提问者采纳

【json.tool】关于python -m json.tool中文乱码问题的处理

参考技术A python一行式解析json怎么避免中文转化为unicode编码?

在以 json 为数据传输格式的 RESTful 接口非常流行。为调试这样的接口,一个常用的办法是使用 curl 命令:

curl   http://xx.xx.xx.xx/some-restful-api

对于返回的 json 字符串,一般在服务端不加处理的情况下,都是没有任何 '\t' 和 '\n' 的。

为了方便查看,在 bash 上可以简单地对它进行格式化:

curl http://xx.xx.xx.xx/some-restful-api | python -m  json.tool

当然这要求机器上安装了 python,其实也就是利用了 json.tool 这个程序。

然而有时候还有一个问题,就是若返回的 json 字符串中包含中文,那么这样打印出来之后,中文会变成以 \u 开头的转义形式,从而让程序员无法直接观察到中文的内容,这并非是一个 bug,而是 json 本身的标准,它要求 json 的内容都是 ascii 编码的,标准的 json 编码器和解码器都会遵循这一点。

# vim /usr/lib64/python2.7/json/tool.py

# curl -s -X POST https://run.mocky.io/v3/e95f6c35-b3c8-43d9-b9ab-f5ce8c1054cf -H 'cache-control: no-cache' | python -m json.tool

python -m json.tool中文乱码问题

https://blog.csdn.net/twingao/article/details/105169997

python -m json.tool 中文乱码 Format JSON with python

https://www.cnblogs.com/ruiy/p/6525591.html

python -m json.tool to output Chinese

python -m json.tool to output Chinese

Saving utf-8 texts with json.dumps as UTF8, not as \u escape sequence

https://stackoverflow.com/questions/18337407/saving-utf-8-texts-with-json-dumps-as-utf8-not-as-u-escape-sequence

以上是关于请教一个关于python处理json的问题的主要内容,如果未能解决你的问题,请参考以下文章

请教一个关于CMFCPropertyGridCtrl的问题

请教关于在golang中怎么使用进程的问题

【json.tool】关于python -m json.tool中文乱码问题的处理

请教问题 关于批处理的FOR命令

请教高手一个关于CMFCPropertyGridCtrl消息处理的问题

一个关于Hibernate问号传值问题,请教高手。