Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.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_Python 3.x_Python 2.7 - Fatal编程技术网

使用python解析JSON循环中的文件

使用python解析JSON循环中的文件,python,python-3.x,python-2.7,Python,Python 3.x,Python 2.7,我有一个我正在解析数据的地方,下面是我尝试过但没有锻炼过的地方 response = requests.post('https://satest.com', headers=headers, data=data) response1=response.json() print(response1[0].evtName) for value in response1: if value['evtName'] = re.match(r'\b(\w*TY-AB12\w*)\b', "T

我有一个我正在解析数据的地方,下面是我尝试过但没有锻炼过的地方

response = requests.post('https://satest.com', headers=headers, data=data)
response1=response.json()
print(response1[0].evtName)
for value in response1:
        if value['evtName'] = re.match(r'\b(\w*TY-AB12\w*)\b', "TY-AB12"): #I want to loop in json Exactly match the evtName with TY-AB12
              print(response1[value]['evtName'])
目标:通过json循环并输出
evtName
evt
PG
的所有值,这些值在
evtName
中关联
TY-AB12
(TY-AB12示例app2 url)

有人能在这里帮助我们如何继续吗。

Simple soution 如果您想要所有项目,它们的
evtName
evtName
中以
TY-AB12
开头,只需查找基本字符串包含项即可

values = response1["data"]
for value in values:
    if value['evtName'].startswith('TY-AB12'):
        print(value)

{'evt': 85, 'evtName': 'TY-AB12 sample app1 url', 'Config': {'CG': 'TTFG', 'PG': '0002'}}
{'evt': 86, 'evtName': 'TY-AB12 sample app2 url', 'Config': {'CG': 'TTFG', 'PG': '0000'}}

选择:
  • evtName
    包含模式:
    如果值['evtName']中的'TY-AB12':

  • evtName
    匹配正则表达式:
    如果重新匹配('TY-AB12',值['evtName']):
    fullmatch
    也存在)


给定一个
响应1
,即

response1 = {
    "name": "testappsa",
    "data": [{"evt": 85, "evtName": "TY-AB12 sample app1 url", "Config": {"CG": "TTFG", "PG": "0002"}},
             {"evt": 85, "evtName": "TY-AB34 sample app1 url", "Config": {"CG": "TTKL", "PG": "0006"}},
             {"evt": 86, "evtName": "TY-AB12 sample app2 url", "Config": {"CG": "TTFG", "PG": "0000"}},
             {"evt": 88, "evtName": "TY ALL - TY-AB12ALL app3 url", "Config": {"CG": "TFFY", "PG": "000"}}]
}
单音 如果您想要所有项目,它们的
evtName
evtName
中以
TY-AB12
开头,只需查找基本字符串包含项即可

values = response1["data"]
for value in values:
    if value['evtName'].startswith('TY-AB12'):
        print(value)

{'evt': 85, 'evtName': 'TY-AB12 sample app1 url', 'Config': {'CG': 'TTFG', 'PG': '0002'}}
{'evt': 86, 'evtName': 'TY-AB12 sample app2 url', 'Config': {'CG': 'TTFG', 'PG': '0000'}}

选择:
  • evtName
    包含模式:
    如果值['evtName']中的'TY-AB12':

  • evtName
    匹配正则表达式:
    如果重新匹配('TY-AB12',值['evtName']):
    fullmatch
    也存在)


给定一个
响应1
,即

response1 = {
    "name": "testappsa",
    "data": [{"evt": 85, "evtName": "TY-AB12 sample app1 url", "Config": {"CG": "TTFG", "PG": "0002"}},
             {"evt": 85, "evtName": "TY-AB34 sample app1 url", "Config": {"CG": "TTKL", "PG": "0006"}},
             {"evt": 86, "evtName": "TY-AB12 sample app2 url", "Config": {"CG": "TTFG", "PG": "0000"}},
             {"evt": 88, "evtName": "TY ALL - TY-AB12ALL app3 url", "Config": {"CG": "TFFY", "PG": "000"}}]
}

您可以循环所有事件并检查evtName是否包含TY-AB12。如果有,那么只需打印您感兴趣的值

导入json
以open('test.dat')作为测试数据:
json\u data=json.load(测试数据)
对于json_数据中的事件:
如果事件['evtName']中的'TY-AB12':
打印(事件['evt']、事件['evtName']、事件['Config']['PG'])
输出

85 TY-AB12 sample app1 url 0002
86 TY-AB12 sample app2 url 0000
88 TY ALL - TY-AB12ALL app3 url 000

您可以循环所有事件并检查evtName是否包含TY-AB12。如果有,那么只需打印您感兴趣的值

导入json
以open('test.dat')作为测试数据:
json\u data=json.load(测试数据)
对于json_数据中的事件:
如果事件['evtName']中的'TY-AB12':
打印(事件['evt']、事件['evtName']、事件['Config']['PG'])
输出

85 TY-AB12 sample app1 url 0002
86 TY-AB12 sample app2 url 0000
88 TY ALL - TY-AB12ALL app3 url 000

我不能使用start with,因为如果您注意到JSON,那么在预期的输出
TY ALL-TY-AB12ALL-app3 url中应该有另一个evtName,那么regex是更好的选择吗?我猜在这种情况下,只要使用inif I do
json\u data=json.load(test\u data)
它会给出错误作为
返回加载(fp.read(),AttributeError:'dict'对象没有属性'read'
这是在图中,我正在加载json数据。您已经有了json_数据,所以您只需在响应中执行
for event in response1:
,因为您已经有了json对象。您可以忽略for循环之前的行。是否需要执行此步骤?
response1=response.json()
因为如果我像你说的那样直接使用
response1
它会给我错误
类型错误:字符串索引必须是整数
我不能使用start with,因为如果你注意到JSON,那么在预期输出中应该有另一个evtName
TY ALL-TY-AB12ALL app3 url
那么regex会是一个更好的选择吗?我猜在这种情况下,只要使用inif I do
json\u data=json.load(test\u data)
它会给出错误作为
返回加载(fp.read(),AttributeError:'dict'对象没有属性'read'
这是在图中,我正在加载json数据。您已经有了json_数据,所以您只需在响应中执行
for event in response1:
,因为您已经有了json对象。您可以忽略for循环之前的行。是否需要执行此步骤?
response1=response.json()
因为如果我像你说的那样直接使用
response1
它会给我错误
TypeError:string索引必须是整数
No我没有dict元素,这就是为什么我使用
response1=response.json()
我的响应看起来像这样,我应该如何对此进行迭代???@Thomas您可能了解dict是什么,您只需要使用“数据”键来获取值查看我的editNo我没有dict元素,这就是为什么我这样做
response1=response.json()
我的回答是这样的,我应该如何对此进行迭代???@Thomas您可能知道dict是什么,您只需要使用“data”键来获取我编辑的值