python解析json字符串
① 如何使用python提取json中指定字段的数据
首先你获取的json数据是字符串a的话,就
import json
d = json.loads(a)
x =d.get("想要的字段")
x就是你要的数据
② python3.0怎么用json从文件解析
1、说明:
python3通过json模块load函数来解析文件。
2、代码示例:
首先编写一个json文件j.txt,内容如下:
{"errno":1,"errmsg":"操作成功!","data":[]}
python代码如下:
1
2
3
4
5
6
import json
with open('j.txt', 'r') as fr:
o = json.load(fr)
print(o['errno'])
print(o['errmsg'])
print(len(o['data']))
输出如下:
1
操作成功!
0
3、函数说明:
load(fp, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
反序列化fp(一个.read()包含 - 支持类文件对象一个JSON文件),以一个Python对象。
object_hook是将与被调用的可选功能任何对象文本解码(一个``dict``)的结果。返回值object_hook将用来代替dict。此功能可用于实现自定义解码器(例如JSON-RPC级提示)。
object_pairs_hook是将与被调用的可选功能任何对象的结果与对的有序列表字面解码。该的返回值object_pairs_hook将用来代替dict。
此功能可用于实现依赖于定制解码器命令该键和值对被解码(例如,collections.OrderedDict会记得插入的顺序)。如果object_hook也定义了object_pairs_hook优先。
要使用自定义JSONDecoder子类,与cls指定它kwarg;否则JSONDecoder使用。
4、其它说明:
也可以使用json.loads函数来直接处理字符串,方法如下:
o=json.loads('{"errno":0,"errmsg":"操作成功!","data":[]}')
③ 请教一个关于python处理json的问题
{
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 "right", "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 <mole>
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。
④ Python网络请求和解析json数据
Python 的 json 模块提供了两个函数 json.mps() 和 json.loads() 来编码和解码JSON数据。
如果要处理的是文件而不是字符串,可以使用 json.mp() 和 json.load() 来编码和解码JSON数据。例如:
⑤ 如何用Python解析Json文件
下面给出一个使用python解析json的简单例子:
#!/usr/bin/python
importjson
#Function:Analyzejsonscript
#,
#fordetail,pleasereferto"http://json.org/json-zh.html".
#Note:
#1.Also,,
#youshoulsempinsteadofload.pleaserreferto"help(json)".
#jsonfile:
#Thefilecontentoftemp.jsonis:
#{
#"name":"00_sample_case1",
#"description":"anexample."
#}
#f=file("temp.json");
#s=json.load(f)
#prints
#f.close
#jsonstring:
s=json.loads('{"name":"test","type":{"name":"seq","parameter":["1","2"]}}')
prints
prints.keys()
prints["name"]
prints["type"]["name"]
prints["type"]["parameter"][1]
⑥ PYTHON关于提取返回JSON结果中特定字段的问题
实际上JSON就是Python字典的字符串表示,但是字典作为一个复杂对象是无法直接转换成定义它的代码的字符串,Python有一个叫
simplejson的库可以方便的完成JSON的生成和解析,这个包已经包含在Python2.6中,就叫json 主要包含四个方法:
mp和mps(从Python生成JSON),load和loads(解析JSON成Python的数据类型)mp和mps的唯一区别是
mp会生成一个类文件对象,mps会生成字符串,同理load和loads分别解析类文件对象和字符串格式的JSON
import json
dic = {
'str': 'this is a string',
'list': [1, 2, 'a', 'b'],
'sub_dic': {
'sub_str': 'this is sub str',
'sub_list': [1, 2, 3]
},
'end': 'end'
}
json.mps(dic)
#output:
#'{"sub_dic": {"sub_str": "this is sub str", "sub_list": [1, 2, 3]}, "end": "end", "list": [1, 2, "a", "b"], "str": "this is a string"}'
举个简单的例子就是:
import json
s = json.loads('{"name":"test", "type":{"name":"seq", "parameter":["1", "2"]}}')
print s
print s.keys()
print s["name"]
print s["type"]["name"]
print s["type"]["parameter"][1]
⑦ 如何用Python,查找json格式中指定的数据,然后输出这些查找到的数据
用Python查找json格式中指定的数据输出这些查找到的数据的操作步骤如下:
1,打开一个编辑器,例如sublime text 3,然后创建一个新的PY文档。