首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Python解析JSON -如何访问深层元素

使用Python解析JSON -如何访问深层元素
EN

Stack Overflow用户
提问于 2017-03-15 14:06:39
回答 4查看 518关注 0票数 2

嗨,我是JSON和Python的新手,这是我的两难境地,它已经困扰我两天了。下面是我想要解析的示例json。

代码语言:javascript
复制
{
    "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代码:

代码语言:javascript
复制
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests
import json
import urllib2

jaysonData = json.load(urllib2.urlopen('URL'))
print jaysonData["Tag1"]

如何获取TagB和TagC的值?当我尝试使用以下命令访问它们时

代码语言:javascript
复制
jaysonData = json.load(urllib2.urlopen('URL'))
print jaysonData["Tag1"]["TagX"]["TagB"]

输出为:

代码语言:javascript
复制
TypeError: string indices must be integers

当我这样做的时候:

代码语言:javascript
复制
print jaysonData["Tag1"]

输出为:

代码语言:javascript
复制
{
"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,但是下面的代码给出了这个错误:

代码语言:javascript
复制
print jaysonData["Tag1"]["TagX"]

打印

代码语言:javascript
复制
    print jaysonData["Tag1"]["TagX"]
TypeError: string indices must be integers

如何使用python访问TagF的TagA?提前谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-03-15 15:54:05

在返回的JSON中,Tag1的值是一个字符串,而不是更多的JSON。它看起来确实是JSON编码的字符串,所以再次将其转换为json:

代码语言:javascript
复制
jaysonData = json.load(urllib2.urlopen('URL'))
tag1JaysonData = json.load(jaysonData['Tag1'])
print tag1JaysonData["TagX"]

还要注意,TagX是一个列表,而不是字典,所以其中有多个TagB

代码语言:javascript
复制
print [x['TagB'] for x in tag1JaysonData['TagX']]
票数 1
EN

Stack Overflow用户

发布于 2017-03-15 14:12:53

TagX是由2个字典组成的listTagBdictionary

代码语言:javascript
复制
print jaysonData["Tag1"]["TagX"][0]["TagB"]

您需要删除Tag1花括号前后的双引号。

代码语言:javascript
复制
{
    "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"
    }
}
票数 0
EN

Stack Overflow用户

发布于 2017-03-15 14:13:20

代码语言:javascript
复制
{
    "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的花括号前去掉双引号。我已经在上面的样品中删除了。

就像这样。

代码语言:javascript
复制
print jaysonData["Tag1"]["TagX"][0]["TagA"]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42802194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档