用Python解析JSON-如何访问深层元素
嗨,我对JSON和Python真的很陌生,这是我的困境,它困扰了我两天。 下面是我想要解析的示例json用Python解析JSON-如何访问深层元素,python,json,Python,Json,嗨,我对JSON和Python真的很陌生,这是我的困境,它困扰了我两天。 下面是我想要解析的示例json { "Tag1":"{ "TagX": [ { "TagA": "A", "TagB": 1.6, "TagC": 1.4, "TagD": 3.5, "TagE": "01", "TagF": null }, { "TagA": "A", "TagB": 1.6, "TagC": 1.4,
{
"Tag1":"{
"TagX": [
{
"TagA": "A",
"TagB": 1.6,
"TagC": 1.4,
"TagD": 3.5,
"TagE": "01",
"TagF": null
},
{
"TagA": "A",
"TagB": 1.6,
"TagC": 1.4,
"TagD": 3.5,
"TagE": "02",
"TagF": null
}
],
"date": "10.03.2017 21:00:00"
}"
}
{
"Tag1":{
"TagX": [
{
"TagA": "A",
"TagB": 1.6,
"TagC": 1.4,
"TagD": 3.5,
"TagE": "01",
"TagF": null
},
{
"TagA": "A",
"TagB": 1.6,
"TagC": 1.4,
"TagD": 3.5,
"TagE": "02",
"TagF": null
}
],
"date": "10.03.2017 21:00:00"
}
}
以下是我的python代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests
import json
import urllib2
jaysonData = json.load(urllib2.urlopen('URL'))
print jaysonData["Tag1"]
如何获取TagB和TagC的值?
当我试图用
jaysonData = json.load(urllib2.urlopen('URL'))
print jaysonData["Tag1"]["TagX"]["TagB"]
输出为:
TypeError: string indices must be integers
{
"TagX": [
{
"TagA": "A",
"TagB": 1.6,
"TagC": 1.4,
"TagD": 3.5,
"TagE": "01",
"TagF": null
},
{
"TagA": "A",
"TagB": 1.6,
"TagC": 1.4,
"TagD": 3.5,
"TagE": "02",
"TagF": null
}
],
"date": "10.03.2017 21:00:00"
}"
当我这样做时:
print jaysonData["Tag1"]
输出为:
TypeError: string indices must be integers
{
"TagX": [
{
"TagA": "A",
"TagB": 1.6,
"TagC": 1.4,
"TagD": 3.5,
"TagE": "01",
"TagF": null
},
{
"TagA": "A",
"TagB": 1.6,
"TagC": 1.4,
"TagD": 3.5,
"TagE": "02",
"TagF": null
}
],
"date": "10.03.2017 21:00:00"
}"
我需要到达TagX、TagD、TagE,但下面的代码给出了此错误:
print jaysonData["Tag1"]["TagX"]
印刷品
print jaysonData["Tag1"]["TagX"]
TypeError: string indices must be integers
如何使用python将TagA访问到TagF?
提前感谢。
TagX
是一个列表
由两个词典组成,TagB
是一个词典
print jaysonData["Tag1"]["TagX"][0]["TagB"]
您需要删除Tag1
的大括号前后的双引号
您必须在Tag1的花括号之前删除双QOUTING。我已经删除了上面的样本
像这样
print jaysonData["Tag1"]["TagX"][0]["TagA"]
你需要考虑一下你的价值观是什么? 您总是按键访问dict元素,并按索引列出元素 要删除引号,可以在从url读取数据后执行
import ast
JsonData = ast.literal_eval(jaysonData["Tag1"])
JsonData["Tagx"][0]["TagB"]
在返回的JSON中,
Tag1
的值是一个字符串,而不是更多的JSON。但它似乎是JSON编码的字符串,因此再次将其转换为JSON:
jaysonData = json.load(urllib2.urlopen('URL'))
tag1JaysonData = json.load(jaysonData['Tag1'])
print tag1JaysonData["TagX"]
还要注意,TagX
是一个列表,而不是一个字典,因此其中有多个TagB
s:
print [x['TagB'] for x in tag1JaysonData['TagX']]
打印jaysonData[“Tag1”][“TagX”][0][“TagB”]类型错误:字符串索引必须为integers@user611811正如Naresh所指出的那样,删除双引号。如何使用python剥离双引号。这个json文件不是本地的,我每分钟都会获取它。你能至少告诉我怎么走吗?@user611811你能告诉我API的链接或者你从哪里收集这些数据吗?这正是我所想的。但这是来自另一个源的实时json数据源。我需要实时解析这个。在jaysonData=json.load(urllib2.urlopen('URL'))之后,我如何在代码中删除它?如果您无法更改响应,请再次执行res=json.load(jaysonData[“Tag1”]),就是这样!非常感谢你的宝贵帮助。