【问题标题】:How can I get and print specific data from a json query?如何从 json 查询中获取和打印特定数据?
【发布时间】:2019-02-05 12:05:29
【问题描述】:

所以我希望能够根据特定条件提取数据,然后我希望能够从该查询中打印多个项目...这是我到目前为止所做的:

def rec():
    qe = JsonQ(r"C:\ShopFloor\data.json")
    res = qe.at('data').where('Status', '=', 1).get()
    for Process, Shortnum in res:
        print(Process['Process'] + " " + Shortnum['Shortnum'])

rec()

这是来自以下 json 文件:

{
    "data": [
        {
            "Shortnum": "34567",
            "Process": "SPA",
            "Status": 1,
            "Start_Time": "2016-12-14 15:54:35",
            "Finish_Time": "2016-12-14 15:56:02"
        },
        {
            "Shortnum": "34567",
            "Process": "Figure",
            "Status": 0,
            "Start_Time": "2016-12-08 15:34:05",
            "Finish_Time": "2016-12-08 15:34:09"
        },

我怎样才能让它正常工作?理想情况下,我正在寻找这种来自印刷品的回应:

SPA 34567

无法获得当前输出,我收到此错误...我意识到我传递了太多参数但是我想不出正确的方法来做到这一点...

Exception has occurred: ValueError
too many values to unpack (expected 2)
  File "C:\ShopFloor\main.py", line 101, in rec
    for Process, Shortnum in res:
  File "C:\ShopFloor\main.py", line 106, in <module>
    rec()

【问题讨论】:

  • 你能展示一下你目前得到的输出吗?
  • @Nathan 对问题进行了更改

标签: python json json-query


【解决方案1】:

在 Python 中使用 JSON 的典型方法是将 JSON 对象加载为 Python dict

import json
with open('C:/ShopFloor/data.json', 'r') as f:
    qe = json.load(f)
for item in qe['data']:
    if item['Status'] == 1:
        print(f'{item["Process"]} {item["Shortnum"]}')

注意这里使用Python 3's f-strings(在访问 f 字符串中的字典值时,请务必交替使用单引号和双引号)。在 Python 2 中,将最后一行替换为:

        print('{} {}'.format(item['Process'], item['Shortnum']))

【讨论】:

  • 感谢您的回复,但是此方法不会从查询中获取 processshortnum,它会提取所有内容,而我需要相同的数据,但仅适用于 status = 1 的位置跨度>
  • 查看编辑后的答案 - 如果这能解决问题,请接受。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-25
  • 1970-01-01
  • 2017-12-30
  • 1970-01-01
  • 1970-01-01
  • 2020-02-20
相关资源
最近更新 更多