如何使用Python从JSON列表中获取数据

24

我是Python的新手,尝试从Python JSON文档中获取数据。我想做的是将信息传递给Python和JSON,然后通过Python打印一个带有表格样式的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文件中提取哪些数据以及如何输出这些数据。请[编辑]您的问题并包含一个小样本,展示输出应该是什么样子的。"get only for example" - user1907906
2
json_data 是什么? - Tim
这是因为json_data是一个列表,而不是字典。 - martineau
你的JSON代码无效。当我尝试json.load(json_file)时,会出现ValueError: Expecting , delimiter: line 5 column 59 (char 104)的错误。 - martineau
你的 JSON 代码问题在于整数不能有前导零,就像你的示例中的 "attId" 一样。请参考 json.org 上的 number 语法图表。 - martineau
2个回答

24
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 (most recent call last): File "prueba.py", line 5, in <module> json_data = json.load(json_file) File "C:\Python27\lib\json_init.py", line 290, in load **kw) File "C:\Python27\lib\json_init.py", line 338, in loads return _default_decoder.decode(s) File "C:\Python27\lib\json\decoder.py", line 368, in decode raise ValueError(errmsg("Extra data", s, end, len(s))) ValueError: Extra data: line 53 column 1 - line 53 column 2 (char 1736 - 1737) - Colours123
你是否像您的帖子中所示一样加载了json文件?如果是这样,能否提供您的json文件?例如,您可以将其内容(或其中一部分)发布到Pastebin。 - konart
仔细一想 - 你的json是无效的。你有像06而不是6这样的值。你必须先修复这个问题。你可以使用http://jsonlint.com/验证你的json。 - konart
是的,由于数字中的前导零,它是无效的。如果一个数字以0开头,它将被解释为八进制或基数8。八进制只使用从0到7的数字。因此,它在“08”和“09”处失败。但是我们该如何修复它呢?... - Darius
我还有一个问题,我正在使用reportlab,但是我不知道如何将这些信息加载到表格(PDF)中。 - Colours123

0

类似于

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)

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


1
我得到了相同的错误 AttributeError: 'list' object has no attribute 'iteritems'。 - Colours123

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接