Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python解析JSON-如何访问深层元素_Python_Json - Fatal编程技术网

用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,

嗨,我对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"
    }"
}
{
    "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”]),就是这样!非常感谢你的宝贵帮助。