【问题标题】:How to get data from a list Json with python?如何使用python从列表Json中获取数据?
【发布时间】:2022-04-24 20:29:57
【问题描述】:

我是 python 新手,并试图从 python json 文档中获取数据,我尝试做的是将信息传递给 python 和 python 中的 json 打印具有表格样式的 pdf。 我在 json 中的代码是

[
    {
        "files": 0, 
        "data": [
            {"name": "RFC", "value": "XXXXXXX", "attId": 01}, 
            {"name": "NOMBRE", "value": "JOSE", "attId": 02}, 
            {"name": "APELLIDO PATERNO", "value": "MONTIEL", "attId": 03}, 
            {"name": "APELLIDO MATERNO", "value": "MENDOZA", "attId": 04}, 
            {"name": "FECHA NACIMIENTO", "value": "1989-02-04", "attId": 05}
        ], 
        "dirId": 1, 
        "docId": 4, 
        "structure": {
            "name": "personales", 
            "folioId": 22
        }
    }, 
    {
        "files": 0, 
        "data": [
            {"name": "CALLE", "value": "AMOR", "attId": 06}, 
            {"name": "No. EXTERIOR", "value": "4", "attId": 07}, 
            {"name": "No. INTERIOR", "value": "2", "attId": 08}, 
            {"name": "C.P.", "value": "55060", "attId": 09}, 
            {"name": "ENTIDAD", "value": "ESTADO DE MEXICO", "attId": 10}, 
            {"name": "MUNICIPIO", "value": "ECATEPEC", "attId": 11}, 
            {"name": "COLONIA", "value": "INDUSTRIAL", "attId": 12}
            ], 
        "dirId": 1, 
        "docId": 4, 
        "structure": {
            "name": "direccion", 
            "folioId": 22
        }
    }
]

在 python 中我提示下一个代码

import json
f= open(prueba.json)
prueba = json.load(f)
prueba

正确打印json的内容,但我的想法只是例如:

Nombre,Jose

然后使用参数在pdf中建表

我已经尝试了以下

 import json
 json_data = []
 with open('prueba.json') as json_file:
     json_data = json.load(json_file)
 for key, value in json_data.iteritems():
   print key; 
   for item in value: 
      print item 
      for key, value in json_data.iteritems(): 
         print key; 
         for item in value: 
            print item

但我有下一个错误:

    AttributeError : 'list' object has no attribute 'iteritems'

我正在尝试为他们做点什么,但我必须获取 json 的每个数据

【问题讨论】:

  • “仅获取示例”。请更详细地描述您要从 JSON 文件中提取哪些数据以及您希望如何输出这些数据。请edit您的问题,并附上一小部分关于输出应该是什么样子的示例。
  • 什么是json_data
  • 那是因为json_data 是一个列表,而不是字典。
  • 您的 JSON 代码无效。当我尝试json.load(json_file) 时,我得到了ValueError: Expecting , delimiter: line 5 column 59 (char 104)
  • 您的 JSON 代码的问题是整数不能有前导零 - 就像您的示例中的 "attId"s 一样 - 请参阅 json.org 上的 number 的语法图。

标签: python json


【解决方案1】:
json_data = [] # your list with json objects (dicts)

with open('prueba.json') as json_file:
   json_data = json.load(json_file)

for item in json_data:
    for data_item in item['data']:
        print data_item['name'], data_item['value']

【讨论】:

  • 我有下一个错误 Traceback(最近一次调用最后一次):文件“prueba.py”,第 5 行,在 json_data = json.load(json_file) 文件“C:\Python27\ lib\json_init_.py”,第 290 行,在加载 **kw) 文件“C:\Python27\lib\json_init_.py”,第 338 行,在加载返回 _default_decoder.decode(s) 文件“C:\Python27\lib\json\decoder.py”,第 368 行,在 decode raise ValueError(errmsg("Extra data", s, end, len(s))) ValueError :额外数据:第 53 行第 1 列 - 第 53 行第 2 列(字符 1736 - 1737)
  • 你加载json文件,如你的帖子所示?如果是这样 - 你能提供你的 json 文件吗?您可以将其内容(或部分内容)发布到 Pastebin,例如
  • 再想一想 - 你的 json 是无效的。您的值类似于 06 而不是 6。你必须先解决这个问题。您可以使用jsonlint.com 验证您的 json
  • 是的,因为数字中的前导零是无效的。如果一个数字以 0 开头,它将被解释为 octal,或以 8 为基数。八进制只使用从 0 到 7 的数字。因此,它在 0809 处失败。但是我们该如何解决呢? ...
  • 另一个我与 reportlab 合作的问题,但我不知道,因为我可以将这些信息加载到表格中(PDF)
【解决方案2】:

类似

for key, value in json_data.iteritems():
    print key
    if isinstance(value, (list, tuple)):
        for item in value: 
            print item
    if isinstance(value, (dict)):
        for value_key,value_value in value.iteritems(): 
            print value_key,str(value_value)

可以改进以管理更多类型,并且可以递归。

【讨论】:

  • 我得到同样的错误 AttributeError : 'list' object has no attribute 'iteritems'
猜你喜欢
  • 2019-01-15
  • 2014-07-04
  • 2023-03-28
  • 2016-10-24
  • 1970-01-01
  • 1970-01-01
  • 2020-06-22
  • 2018-11-29
  • 1970-01-01
相关资源
最近更新 更多