【问题标题】:change JSON key to return to API更改 JSON 密钥以返回 API
【发布时间】:2018-10-15 10:41:37
【问题描述】:

我从 DynamoDB 中读取了一个表,并将其作为 JSON 对象发送到 API。我想将 JSON 键名 (reg,dreg,stat,num) 更改为 (a,b,c,d)

import boto3
import json
import re

def lambda_handler(event, context):
    dynamodb = boto3.resource('dynamodb', region_name='xx-xxxxxxx-1')
    table = dynamodb.Table('_master')

    response = table.scan()
    data =[sanitize(item) for item in response['Items']]

    while 'LastEvaluatedKey' in response:
        response = table.scan(ExclusiveStartKey=response['LastEvaluatedKey'])
        data.extend(sanitize(item) for item in response['Items'])


    return {
        'statusCode': 200,
        'headers': {
            'Access-Control-Allow-Origin' : '*',
        },
        'body': json.dumps(data)
    }

def sanitize(item):
    item['dreg'] = item['dreg'].rstrip('\r\n')

    return item

JSON 对象是:

[{"reg": "29-Oct-18", "dreg": "31-Dec-99", "stat": "R", "num": "xob13020"}, {"reg": "29-Oct-18", "dreg": "31-Dec-99", "stat": "R", "num": "oxb03873"}]

我想将 JSON 键名 (reg,dreg,stat,num) 更改为 (a,b,c,d)

【问题讨论】:

  • 到目前为止你尝试过什么?有什么问题?
  • 您不能直接更改 dict 中键的名称,但您可以:1/ 使用正确的键名创建对象的副本或 2/ 将新键附加到 dict 并删除旧的一个
  • 试过 json.replace - 得到这个错误:AttributeError: 'list' object has no attribute 'replace'
  • @KlausD。我无法弄清楚这一点。你能帮忙吗

标签: python arrays json


【解决方案1】:

只需创建一个具有正确键名的新字典。例如:

[ { (k+'1') : v for k,v in sanitize(item).items() } for item in response['Items']]

(但也许选择更好的命名约定............)

【讨论】:

  • 我实际上并没有在这里得到你的答案。我是 python 新手。帮助解释上面的例子
  • 编辑了我的问题 - 为了更好地理解
  • aa1 可以从您的代码中理解。我如何将reg 转换为a
  • name_map = {"reg":"a","dereg":"b","stat":"c","num":"d"} data =[ { name_map[k] : v for k,v in sanitize(item).items() } for item in response['Items']]
【解决方案2】:

首先将你的json加载到dict

>>> jsonobj = '[{"reg": "29-Oct-18", "dreg": "31-Dec-99", "stat": "R", "num": "xob13020"}, {"reg": "29-Oct-18", "dreg": "31-Dec-99", "stat": "R", "num": "oxb03873"}]'
>>> import json
>>> json.loads(jsonobj)
[{u'stat': u'R', u'num': u'xob13020', u'reg': u'29-Oct-18', u'dreg': u'31-Dec-99'}, {u'stat': u'R', u'num': u'oxb03873', u'reg': u'29-Oct-18', u'dreg': u'31-Dec-99'}]
>>> listdata = json.loads(jsonobj)

然后遍历字典列表

>>> [item for item in listdata]
[{u'stat': u'R', u'num': u'xob13020', u'reg': u'29-Oct-18', u'dreg': u'31-Dec-99'}, {u'stat': u'R', u'num': u'oxb03873', u'reg': u'29-Oct-18', u'dreg': u'31-Dec-99'}]
>>> [{key:value for key,value in item.iteritems()} for item in listdata]
[{u'stat': u'R', u'num': u'xob13020', u'reg': u'29-Oct-18', u'dreg': u'31-Dec-99'}, {u'stat': u'R', u'num': u'oxb03873', u'reg': u'29-Oct-18', u'dreg': u'31-Dec-99'}]

用字典数据结构中的键映射,

>>> key_value_map = {'stat': 'c', 'num': 'd', 'reg': 'a', 'dreg': 'b'}

您可以更改键值!

>>> [{key_value_map[key]:value for key,value in item.iteritems()} for item in listdata]
[{'a': u'29-Oct-18', 'c': u'R', 'b': u'31-Dec-99', 'd': u'xob13020'}, {'a': u'29-Oct-18', 'c': u'R', 'b': u'31-Dec-99', 'd': u'oxb03873'}]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多