【问题标题】:How to rename key and change value in json array如何重命名json数组中的键和更改值
【发布时间】:2017-08-29 08:25:46
【问题描述】:

我有一个 json,它是:

abc = """
    {"entities":[
        {"entity":"sys-date",
         "location": [38,56],
         "value":"2007-01-01"}
    ]}
"""

我需要将实体名称 sys-date 替换为名称 Year 并且值应更新为 2007(从日期中提取年份部分)。

应该删除现有的名称 sys-date 和值 2007-01-01。

我如何在 python 2x 中进行操作。请帮忙。

【问题讨论】:

  • 你是从字符串还是文件中获取json?
  • 我建议在您的帖子被否决之前添加更多相关标签。标签如:json、正则表达式、时间更符合您的需求
  • @MasoudMasoumiMoghadam 完全正确!如果他需要明确的 Python 2.x 解决方案,则不能用 python-3.x 标记它
  • @cezar 我完全同意。顺便说一句很酷的版本...
  • 指出了 Masoud 和 Cezar。谢谢。

标签: python json python-2.7 date


【解决方案1】:

您可以使用json模块将json字符串加载或转储到python中的简单dict对象并根据需要进行编辑。

为了编辑日期时间,我使用datetime.strptime 将日期字符串转换为日期时间对象。

你可以阅读更多关于strptimehere的信息。

import json
from datetime import datetime


json_string = '''
    {entities":[
        {"entity":"A","location":[12,19],"value":"B",‌​"confidence":1},
        {"en‌​tity":"C","location"‌​:[23,28],"value":"D"‌​,"confidence":1},
        {"e‌​ntity":"E","location‌​":[29,34],"value":"F‌​","confidence":1},
        {"‌​entity":"sys-date","‌​location":[38,56],"v‌​alue":"2007-01-01"}
        '''

json_dict = json.loads(json_string)

for item in json_dict['entities']:
    if item['entity'] == 'sys-date':
        item['entity'] = 'Year'
        date = datetime.strptime(item['value'], '%Y-%m-%d')
        item['value'] = date.year

json_string = json.dumps(json_dict)

【讨论】:

  • 这是出色的弗拉德。非常感谢。像魅力一样工作。
  • 不错!虽然年份的值可以更简单地从字符串中获取:json_dict['entities'][0]['value'][:4]。
  • 是的,我们可以通过拼接来做到这一点,但我总是使用strptime从字符串转换为日期时间,因为在某些情况下这更有效更简单
  • 有没有一种方法可以找到替换,例如在 Json 中查找“sys-date”的位置并将其替换为年份,同样查找“2007-01-01”的位置并提取年份从中?除了使用字典位置之外还有其他方法吗?
  • 可能存在“sys-date”位置不同的字符串。我如何创建一个通用函数来扫描 json 对象(无论位置如何)以查找“sys-date”并将其替换为 Year 并从相应日期中提取年份。请指教。
猜你喜欢
  • 2018-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-14
  • 1970-01-01
  • 1970-01-01
  • 2019-04-25
  • 2023-01-27
相关资源
最近更新 更多