您好我是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,
"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
当我这样做时:
print jaysonData["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"
}"
我需要访问TagX,TagD,TagE,但下面的代码会出现此错误:
print jaysonData["Tag1"]["TagX"]
打印
print jaysonData["Tag1"]["TagX"]
TypeError: string indices must be integers
如何使用python访问TagA到TagF? 提前谢谢。
答案 0 :(得分:1)
在返回的JSON中,Tag1
的值是一个字符串,而不是更多的JSON。它看起来似乎是JSON编码为字符串,所以再次转换为json:
jaysonData = json.load(urllib2.urlopen('URL'))
tag1JaysonData = json.load(jaysonData['Tag1'])
print tag1JaysonData["TagX"]
另请注意,TagX
是一个列表,而不是字典,因此其中包含多个TagB
:
print [x['TagB'] for x in tag1JaysonData['TagX']]
答案 1 :(得分:0)
TagX
是list
,由2个词典组成,TagB
是dictionary
。
print jaysonData["Tag1"]["TagX"][0]["TagB"]
您需要在Tag1
的大括号之前和之后删除双引号。
{
"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"
}
}
答案 2 :(得分:0)
{
"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的大括号之前删除双qoutation。我在上面的示例中删除了。
和这样的接近。
print jaysonData["Tag1"]["TagX"][0]["TagA"]
答案 3 :(得分:0)
您需要考虑您要访问的值,例如字典或列表? 您始终按键访问dict元素,并按索引列出元素。
删除从网址读取数据后可以执行的引号。
import ast
JsonData = ast.literal_eval(jaysonData["Tag1"])
JsonData["Tagx"][0]["TagB"]